C# 以字符串形式加载.dll ressource

C# 以字符串形式加载.dll ressource,c#,dll,C#,Dll,我有一个函数,需要获取运行它们的dll文件的路径。 为了更方便地使用我的应用程序,我不想让用户键入dll文件的路径。我已经将dll文件添加为ressource,但我的方法需要以字符串形式获取.dll文件的路径。如何获取名为test2.dll的dll文件的字符串? 我所发现的只是在程序本身中使用.dll文件中的函数,而不是加载包含的.dll的路径 string assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly(

我有一个函数,需要获取运行它们的dll文件的路径。 为了更方便地使用我的应用程序,我不想让用户键入dll文件的路径。我已经将dll文件添加为ressource,但我的方法需要以字符串形式获取.dll文件的路径。如何获取名为test2.dll的dll文件的字符串? 我所发现的只是在程序本身中使用.dll文件中的函数,而不是加载包含的.dll的路径

string assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
你可以试试这个

Assembly.GetExecutingAssembly().Location
将为您提供执行程序集的补丁,然后:

System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)

如果我理解您的意思,听起来您有一个DLL文件,它是项目中嵌入的资源,您希望能够提取该DLL,然后从该DLL加载资源。这里有一个例子

首先,需要将DLL提取到字节数组:

byte[] buffer;
var assembly = Assembly.GetExecutingAssembly();
using (var stream = assembly.GetManifestResourceStream("SomeNamespace.somefile.dll"))
{
    buffer = new byte[stream.Length];
    stream.Read(buffer, 0, buffer.Length);
}
现在,这个DLL文件包含在缓冲区字节数组中。接下来,我们需要将字节数组写入某个文件:

string file = Path.GetTempPath() + "\\somefile.dll";
File.WriteAllBytes(file, buffer);
最后,您可以读取DLL并提取所需的任何资源:

var assembly = Assembly.Load(file);
using (var stream = assembly.GetManifestResourceStream("SomeNamespace.someresourcefile.png"))
{
    // Read in stream and do something with the resource
}

该路径将与可执行文件运行的位置相对。如果您可以获取应用程序路径,并且知道资源相对于应用程序路径应该位于何处,那么这就像连接字符串一样简单。还要查看Path.combineb,但如何加载程序集?在我的项目中称为test2.dll。my.dll dlltest.dll作为ressource添加并内置到应用程序中,希望您理解我的意思: