gpt4 book ai didi

C# 4.0 将 .dll 程序集与 .NET 合并

转载 作者:太空狗 更新时间:2023-10-30 00:57:40 24 4
gpt4 key购买 nike

我决定离开我的 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);
}
}
;

我应该将 resourceName 更改为其他名称吗?我是否正确添加了它(在正确的位置)?

现在的问题是,它仍然无法找到并加载程序集,我不确定我做错了什么。任何帮助将不胜感激。

最佳答案

您的问题与此非常相似:C#: How to embed DLL into resourcefile (no dll copy in program directory)

基本上,您的 AppDomain.AssemblyResolve 事件处理程序没有被调用,因为 Main 编译失败。即使它确实编译了,附加事件处理程序也应该是您在 main 中做的第一件事。

我对上述问题的回答有一个有效的代码示例,并解释了为什么您的代码不起作用。

关于C# 4.0 将 .dll 程序集与 .NET 合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4637962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com