我知道这个主题有很多回复,但是我在这个回复中找到的示例代码不适用于每个 .dll
我用了这个例子。
public App()
{
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(ResolveAssembly);
}
static Assembly ResolveAssembly(object sender, ResolveEventArgs args)
{
//We dont' care about System Assemblies and so on...
if (!args.Name.ToLower().StartsWith("wpfcontrol")) return null;
Assembly thisAssembly = Assembly.GetExecutingAssembly();
//Get the Name of the AssemblyFile
var name = args.Name.Substring(0, args.Name.IndexOf(',')) + ".dll";
//Load form Embedded Resources - This Function is not called if the Assembly is in the Application Folder
var resources = thisAssembly.GetManifestResourceNames().Where(s => s.EndsWith(name));
if (resources.Count() > 0)
{
var resourceName = resources.First();
using (Stream stream = thisAssembly.GetManifestResourceStream(resourceName))
{
if (stream == null) return null;
var block = new byte[stream.Length];
stream.Read(block, 0, block.Length);
return Assembly.Load(block);
}
}
return null;
}
当我创建一个只有一个窗口和一个按钮的小程序时,它可以工作,但是使用我的“大”dll 它没有工作。“大” dll 上的设置与我的小程序中的设置相同。
我无法想象为什么它有时会起作用,有时却不起作用。我也用 ICSharp.AvalonEdit.dll 对其进行了测试,但不成功..
谁能想象错误在哪里?
编辑 1
当我启动我的程序时,它说它找不到我的 dll。
编辑 2
我想我得到了问题的核心。如果我要合并的其中一个 dll 包含对另一个 dll 的引用,那么我将成为此FileNotFoundException
异常。有人知道如何加载/添加内部所需的 dll
编辑 3
当我使用 Jiří Polášek 的代码时,它适用于某些人。我的Fluent显示错误“请附上带有样式的 ResourceDictionary。但我已经在我的App.xaml
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Fluent;Component/Themes/Office2010/Silver.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>