gpt4 book ai didi

c# - 将 .dll 合并到 C# 程序集中?

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

使用#C.net 3.5

我知道 ILMerge 和类似技术,但实际上我想利用 Jeffrey Richter's suggestions .

将此代码添加到构造函数后,出现命名空间问题。

Jeffrey Richter 的代码:

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);
}
};

我将这两个 DLL 设置为“嵌入式资源”并将它们添加为引用,但是当我构建程序时,这两个 DLL 仍然是“未嵌入的”,然后我将它们作为引用删除但是当我构建时该程序有错误说:“找不到类型或 namespace ...您是否缺少 using 指令或程序集引用?”我将两个 namespace 添加为 using 指令...,然后我尝试删除两个引用和两个 using 指令,但仍然出错。

这是我的代码:

using System.Reflection;
namespace WindowsFormsApplication2
{
public partial class Ndice : Form
{
public Ndice()
{
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);
}
};
InitializeComponent();
}
}
}

最佳答案

从你问题的描述来看,有些事情不清楚,可能需要回答:

  1. 到底是什么不起作用?您是在编译时还是在运行时失败?
  2. 能否展示无法编译或在运行时无法运行的代码?
  3. 您说程序集是“未嵌入的”是什么意思?

基本上,据我了解,您的代码尝试使用来自 2 个程序集的类。此代码是静态的,这意味着必须在编译时 知道这些类。或者换句话说,您必须引用这 2 个程序集才能编译使用其中定义的类型的代码。

我真的不明白当您添加这些程序集作为引用时出了什么问题。如果困扰您的是您看到它们被复制到 bin/debug 目录中,那仍然不应该阻止它们也被嵌入到您的主程序集中。因此,要进行测试,您可以尝试从 bin/debug 中手动删除它们,或者将它们设置为“copy local = false”。

还有一件事 - 您遇到的提到“使用”和“ namespace ”的错误实际上与 namespace 无关。这个错误意味着编译器没有找到它需要的类型。这可能是因为您删除了对 2 个程序集的引用。

关于c# - 将 .dll 合并到 C# 程序集中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4356798/

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