如果使用了这些程序集,您将无法运行您的应用程序。毕竟,您正在使用仅在这些程序集中的代码,如果您的应用程序除了关闭之外没有找到所需的代码,应该怎么办?
但是有一种方法可以将程序集嵌入到您的 exe 中,因此您只需重新分发一个文件。引用的程序集可以作为嵌入式资源添加(将 dll 添加到您的项目并将其设置"Build Action"
为"Embedded Resource"
)并从那里加载。
然后,您需要自己加载它,AppDomain.AssemblyResolve
以防当前AppDomain
. 为此,您需要向此事件添加一个处理程序,如下所示:
AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => {
String resourceName =
"YourDefaultNameSpace." + 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);
}
};
对于 WPF 应用程序,您可以覆盖App.OnStartup (in App.xaml.cs
) 并将其添加到那里:
protected override void OnStartup(StartupEventArgs e) {
base.OnStartup(e);
// ---- Add the handler code here ----
}
原始来源和更多详细信息:
Jeffrey Richter: Excerpt #2 from CLR via C#, Third Edition