【发布时间】:2011-06-05 23:53:34
【问题描述】:
我决定放弃我的other question,因为我想到了一个新的想法,使用 Jeffrey Richter 在this page 上编写的方法将 .dll 库合并到我的应用程序中。所以我将我的 .dll 文件添加为嵌入式资源,并将其添加为参考。然后在 Program.cs 中(我不知道他发布的代码应该去哪里),我添加了这个:
...
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
string[] args = Environment.GetCommandLineArgs();
if (args.Length > 1)
_in = args[1];
SingleInstanceController controller = new SingleInstanceController();
controller.Run(args);
AppDomain.CurrentDomain.AssemblyResolve += (sender, argsx) =>
{
String resourceName = "AssemblyLoadingAndReflection." +
new AssemblyName(argsx.Name).Name + ".dll";
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
{
Byte[] assemblyData = new Byte[stream.Length];
stream.Read(assemblyData, 0, assemblyData.Length);
return Assembly.Load(assemblyData);
}
}
;
我应该将资源名称更改为其他名称吗?我是否正确添加了它(在正确的位置)?
现在的问题是,它仍然无法找到并加载程序集,我不确定我做错了什么。任何帮助将不胜感激。
【问题讨论】:
-
只是好奇;为什么还要费心(有效地)静态链接 DLL?
-
因为我不想分发我的程序将 10-15 个用户认为无用的文件。
-
为什么用户仍然在程序文件中挖掘?只需将它们安装到子目录中即可。我的意思是,“DLL”中的“DL”代表“动态链接”。
标签: c# .net dll assemblies merge