使用 #C.net 3.5
我知道ILMerge和类似的技术,但我实际上想利用Jeffrey Richter的建议。
在将此代码添加到构造函数后,会出现命名空间问题。
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仍然是“未嵌入的”。然后我将它们作为引用移除,但是在构建程序时会出现错误,显示:“找不到类型或命名空间...是否缺少使用指令或程序集引用?”我已经将这两个命名空间添加为使用指令...然后我尝试删除这两个引用和两个使用指令,但仍然出现错误。
这是我的代码:
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();
}
}
}