我将遵循http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx。
我已经将WPFToolkit.Extended.dll添加到我的解决方案中,并将其构建操作设置为嵌入式资源。
在App.OnStartup(StartupEventArgs e)中,我有以下代码:
调试器会两次进入这个代码块。
第一次:
我已经将WPFToolkit.Extended.dll添加到我的解决方案中,并将其构建操作设置为嵌入式资源。
在App.OnStartup(StartupEventArgs e)中,我有以下代码:
AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
{
String resourceName = "AssemblyLoadingAndReflection." + new AssemblyName(args.Name).Name + ".dll";
String assemblyName = Assembly.GetExecutingAssembly().FullName;
Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName);
using (stream)
{
Byte[] assemblyData = new Byte[stream.Length];
stream.Read(assemblyData, 0, assemblyData.Length);
return Assembly.Load(assemblyData);
}
};
调试器会两次进入这个代码块。
第一次:
resourceName is "AssemblyLoadingAndReflection.StatusUtil.resources.dll"
assemblyName is "StatusUtil, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
stream is null
第二次:
resourceName is "AssemblyLoadingAndReflection.WPFToolkit.Extended.resources.dll"
assemblyName is "StatusUtil, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
stream is null
当代码遇到stream.Length为null时,会抛出异常。
由于这是一个WPF项目,因此无法使用ILMerge。
String resourceName = Assembly.GetExecutingAssembly().FullName.Split(',').First() + "." + new AssemblyName(args.Name).Name + ".dll";
这段代码,它给我返回了 "StatusUtil.WPFToolkit.Extended.resources.dll",出现了相同的症状。请问完整的 resourceName 应该是什么? - epalmxmlns:extToolkit="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit.Extended"
曾经在MainWindow.xaml中起作用,但现在不行了,xmlns:extToolkit="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit.Extended.resources"
也是如此。 - epalm