Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to associate external files with an assembly

Let's say you have a class library project that has any number of supplemental files that also need to be included with the compiled assembly (e.g. simple text files or even a legacy unmanaged DLL that's wrapped by the assembly as an interop layer). While embedding the supplemental files into the assembly itself is relatively straightforward, we have situations where this is not possible or just undesirable. We need to have them as "sidecar" files (i.e. files alongside the assembly, potentially in subdirectories relative to the assembly)

Adding those files to the project with an appropriate value for "Copy to Output Directory" specified appears to be sufficient for projects that are completely self-contained within a solution. But if a separate project in another solution adds a reference to the assembly, it does not automatically pickup its sidecar files. Is there a way in the project to somehow mark the resulting assembly such that anything referencing the assembly will also know it needs to include the associated sidecar files? How do you do this?

like image 270
iammichael Avatar asked Apr 23 '09 15:04

iammichael


2 Answers

You can use al.exe, but there also appears to be a C# compiler option. You want to create a multifile assembly using the /linkresource C# compiler option. Instructions are here, but the command is similar to this:

csc /linkresource:N.dll /t:library A.cs

Where N.dll is a native DLL that will go wherever the managed assembly goes (including into the GAC.) There's a very clear description at the link I provided.

like image 83
GuyBehindtheGuy Avatar answered Nov 18 '22 03:11

GuyBehindtheGuy


Have you tried creating a setup for your solution ? There's an option of including sidecar files targeting to application installation directory.

Another option would be to include the sidecar files in the Assembly resources and un-wrap them to disk when run for the first time.

like image 1
this. __curious_geek Avatar answered Nov 18 '22 01:11

this. __curious_geek