相关疑难解决方法(0)

将一个dll嵌入另一个dll作为嵌入式资源,然后从我的代码中调用它

我有一个情况,我有一个我正在创建使用另一个第三方DLL的DLL,但我更愿意能够将第三方DLL构建到我的DLL中,而不是必须将它们保持在一起,如果可能的话.

这是C#和.NET 3.5.

我想这样做的方法是将第三方DLL存储为嵌入式资源,然后在执行第一个DLL期间将其放置在适当的位置.

我最初计划这样做的方法是编写代码将第三方DLL放在System.Reflection.Assembly.GetExecutingAssembly().Location.ToString() 减去最后一个指定的位置/nameOfMyAssembly.dll.我可以成功地将第三方保存.DLL在这个位置(最终成为

C:\ Documents and Settings\myUserName\Local Settings\Application Data\assembly\dl3\KXPPAX6Y.ZCY\A1MZ1499.1TR\e0115d44\91bb86eb_fe18c901

),但是当我到达需要此DLL的代码部分时,它无法找到它.

有没有人知道我需要采取哪些不同的做法?

c# dll .net-3.5

57
推荐指数
5
解决办法
4万
查看次数

在DLL中将DLL作为嵌入式资源包含在WPF项目中

我正在关注http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx

我已将WPFToolkit.Extended.dll添加到我的解决方案中,并将其Build Action设置为Embedded Resource.

在App.OnStartup(StartupEventArgs e)中,我有以下代码:

AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
{
    String resourceName = "AssemblyLoadingAndReflection." + new AssemblyName(args.Name).Name + ".dll";
    String assemblyName = Assembly.GetExecutingAssembly().FullName;
    Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName);
    using (stream)
    {
        Byte[] assemblyData = new Byte[stream.Length];
        stream.Read(assemblyData, 0, assemblyData.Length);
        return Assembly.Load(assemblyData);
    }
};
Run Code Online (Sandbox Code Playgroud)

调试器会两次触发此代码块.

第一次:

resourceName is "AssemblyLoadingAndReflection.StatusUtil.resources.dll"
assemblyName is "StatusUtil, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
stream is null
Run Code Online (Sandbox Code Playgroud)

第二次:

resourceName is "AssemblyLoadingAndReflection.WPFToolkit.Extended.resources.dll"
assemblyName is "StatusUtil, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
stream is null
Run Code Online (Sandbox Code Playgroud)

代码在遇到stream.Length时抛出异常,因为它为null.

我不能使用ILMerge,因为它是一个WPF项目.

c# embed wpf dll include

5
推荐指数
1
解决办法
4944
查看次数

标签 统计

c# ×2

dll ×2

.net-3.5 ×1

embed ×1

include ×1

wpf ×1