【发布时间】:2011-03-21 18:06:38
【问题描述】:
As stated here 我试图将 dll 嵌入到 exe 应用程序中以便仅分发一个 exe,但是当我尝试在安装了完整 .NET 4 的 xp 机器上运行我的应用程序时,它只是崩溃而没有错误,我将以下代码放在main方法上
[STAThread]
static void Main()
{
AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
{
String resourceName = "AssemblyLoadingAndReflection." + new AssemblyName(args.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);
}
};
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmrPrincipal());
}
我有一个名为 dlls 的文件夹,我在其中放置
Functions.Shared.dll
Alex.UI.dll
Alex.Controls.dll
并且我将其构建操作设置为“嵌入式资源”。
如果我删除那段代码并设置要通过单击安装程序包含的 dll,它可以正常工作。顺便说一句,我使用 .NET Framework 4 Full profile 和 VS2010 SP1
【问题讨论】:
-
使用 ClickOnce 时合并 DLL 毫无意义。它不介意多个 DLL。相反,下载更新的内容更少。
-
好吧,我不会使用 ClickOnce 来分发我的应用程序,我只想分发 exe 文件
-
好的,将其命名为 setup.exe,就像安装项目创建的那个一样。如有必要,还负责安装 .NET、创建快捷方式以帮助您的用户入门、文件关联等。
-
好吧好吧,你让我知道了 :) 你的答案是肯定的,但无论如何代码有什么问题?有什么想法吗?
标签: c# winforms reflection c#-4.0