我的问题是关于Fluent的,我使用以下代码在一个merged.exe中将其与program.exe
合并:
public class Program
{
[STAThreadAttribute]
public static void Main()
{
AppDomain.CurrentDomain.AssemblyResolve += OnResolveAssembly;
App.Main();
}
private static Assembly OnResolveAssembly(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;
}
}
我的问题是Fluent Ribbon Control无法找到任何样式,但是我用他们的代码在我的app.xaml中解决了它
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Fluent;Component/Themes/Office2010/Silver.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
我使用此解决方案的第二个问题是,在没有Visual Studio的情况下启动该程序时,无法使用程序连接到数据库(SQL Express)。
当我在同一个文件夹中有流利语言时,它就可以正常工作,因为那样的话,它就不会从嵌入式引用的流利语言中加载它。而且Fluent也可以找到样式。
有没有人有过将dll/fluent合并到main.exe中的类似经验,您能告诉我如何解决它吗?
最佳答案
请改用Fody.Costura,它对我有用(而且我也使用Fluent)。
https://github.com/Fody/Costura
重要的事情之一是让您的应用程序知道它必须加载程序集。我有时会强制加载的是在您的应用启动时执行的操作:
Console.WriteLine(typeof(Fluent).Name);