C#DLLを.EXEにマージします

Karl_Schuhmann

このトピックへの返信がたくさんあることは知っていますが、この返信で見つけたサンプルコードは、各.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;
    }

1つのウィンドウと1つのボタンだけで小さなプログラムを作成したときは機能しましたが、「大きな」dllでは機能しませんでした。「大きな」dllの設定は、私の小さなプログラムの設定と同じです。

なぜそれが時々機能するのか、時には機能しないのか想像できません。ICSharp.AvalonEdit.dllでもテストしましたが、失敗しました。

誰かがエラーがどこにあるか想像できますか?

編集1

プログラムを起動すると、dllが見つからないと表示されます。

編集2

私は自分の問題の核心をつかんだと思います。マージしたいdllの1つに、他の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> 
JiříPolášek

参照するアセンブリで他のアセンブリが必要な場合は、それらをアプリケーションに含める必要があります(アプリケーションフォルダーまたは埋め込みリソースとして)。Visual Studio、IL Spy、dotPeekを使用して参照されるアセンブリを決定するか、メソッドを使用して独自のツールを作成できますAssembly.GetReferencedAssemblies

ハンドラーをAssemblyResolveアタッチする前にイベントが発生する可能性もありますResolveAssemblyMainメソッドで最初に行うのは、ハンドラーのアタッチです。WPFでは、新しいMainメソッドを使用して新しいクラスを作成し、プロジェクト設定でスタートアップオブジェクトとして設定する必要があります。

public class Program
{
    [STAThreadAttribute]
    public static void Main()
    {
        AppDomain.CurrentDomain.AssemblyResolve
            += new ResolveEventHandler(ResolveAssembly);
        WpfApplication1.App app = new WpfApplication1.App();
        app.InitializeComponent();
        app.Run();
    }

    public static Assembly ResolveAssembly(object sender, ResolveEventArgs args)
    {   
      // check condition on the top of your original implementation
    }
}

またResolveAssembly、参照されているアセンブリを除外しないように、上部のガード条件を確認する必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

VBAのC#dllでstring []を返す

分類Dev

UWPでC#dllを使用する方法

分類Dev

PythonでC#DLLを使用する

分類Dev

C#DLLでOpenFileDialogを使用する

分類Dev

C ++ / CLIからC#dllを呼び出すときのFileNotFoundException

分類Dev

アンマネージC#DLLからリスト/配列を返す

分類Dev

アンマネージDelphiEXEでマネージC#DLLを使用できますか?

分類Dev

JavaでC#dllを参照して使用する必要があります

分類Dev

.NET 4.5 C#DLLをUnity2018.2.5にロードした後のTypeLoadException

分類Dev

C#dllインジェクションがdllをロードしていません

分類Dev

C ++アプリからSOAPWebサービスを呼び出すC#DLL

分類Dev

c#asp.net mvc5、c#dllにjsを埋め込む

分類Dev

マネージドC#DLLをアンマネージドC ++ DLLに含める-すべて1つのファイルに

分類Dev

JavaアプリケーションからC#dllを呼び出す

分類Dev

言語を変更するC#dllリソースファイル

分類Dev

LinuxのPythonからC#dllを呼び出すことは可能ですか?

分類Dev

電子アプリでC#dllメソッドを呼び出す方法は?

分類Dev

署名されたC#DLLの整合性を確認する方法は?

分類Dev

DelphiでC#DLLをロードしても、依存ライブラリDLLが見つかりません

分類Dev

PowerShellを使用してC#DLLをロードすると、[System.Type] :: GetTypeはnullを返します

分類Dev

C#DLLからコンソールを開き、それを使用して出力を印刷します

分類Dev

アンマネージドエクスポートを使用してC#DLLからInnoSetupスクリプトに文字列を返す

分類Dev

C#DLLからクラスと関数ヘッダーを一覧表示します

分類Dev

C ++で使用するためにC#dllメソッド/関数をエクスポートする方法

分類Dev

パラメータとしてref文字列を持つマネージドC#dllのC ++ラッパーを作成する方法

分類Dev

Delphi 10を使用してC#dllからWindows証明書リストを開きます

分類Dev

PythonでC#dllからサブモジュールをインポートする方法

分類Dev

コールバックを使用してInnoSetupからC#DLLを呼び出す

分類Dev

Reflectionを使用してC#DLLからC#メソッドを呼び出す

Related 関連記事

  1. 1

    VBAのC#dllでstring []を返す

  2. 2

    UWPでC#dllを使用する方法

  3. 3

    PythonでC#DLLを使用する

  4. 4

    C#DLLでOpenFileDialogを使用する

  5. 5

    C ++ / CLIからC#dllを呼び出すときのFileNotFoundException

  6. 6

    アンマネージC#DLLからリスト/配列を返す

  7. 7

    アンマネージDelphiEXEでマネージC#DLLを使用できますか?

  8. 8

    JavaでC#dllを参照して使用する必要があります

  9. 9

    .NET 4.5 C#DLLをUnity2018.2.5にロードした後のTypeLoadException

  10. 10

    C#dllインジェクションがdllをロードしていません

  11. 11

    C ++アプリからSOAPWebサービスを呼び出すC#DLL

  12. 12

    c#asp.net mvc5、c#dllにjsを埋め込む

  13. 13

    マネージドC#DLLをアンマネージドC ++ DLLに含める-すべて1つのファイルに

  14. 14

    JavaアプリケーションからC#dllを呼び出す

  15. 15

    言語を変更するC#dllリソースファイル

  16. 16

    LinuxのPythonからC#dllを呼び出すことは可能ですか?

  17. 17

    電子アプリでC#dllメソッドを呼び出す方法は?

  18. 18

    署名されたC#DLLの整合性を確認する方法は?

  19. 19

    DelphiでC#DLLをロードしても、依存ライブラリDLLが見つかりません

  20. 20

    PowerShellを使用してC#DLLをロードすると、[System.Type] :: GetTypeはnullを返します

  21. 21

    C#DLLからコンソールを開き、それを使用して出力を印刷します

  22. 22

    アンマネージドエクスポートを使用してC#DLLからInnoSetupスクリプトに文字列を返す

  23. 23

    C#DLLからクラスと関数ヘッダーを一覧表示します

  24. 24

    C ++で使用するためにC#dllメソッド/関数をエクスポートする方法

  25. 25

    パラメータとしてref文字列を持つマネージドC#dllのC ++ラッパーを作成する方法

  26. 26

    Delphi 10を使用してC#dllからWindows証明書リストを開きます

  27. 27

    PythonでC#dllからサブモジュールをインポートする方法

  28. 28

    コールバックを使用してInnoSetupからC#DLLを呼び出す

  29. 29

    Reflectionを使用してC#DLLからC#メソッドを呼び出す

ホットタグ

アーカイブ