我的问题是关于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);

10-08 00:37