69

配布しやすくするためにEXEファイルに含めたいDLLファイルが2つあります。私はこれを行う方法をあちこちで読んだり、ここやここで良いスレッドを見つけたりしましたそれは私にはあまりにも複雑であり、これを行う方法についての本当の基本的な指示が必要です。

私はMicrosoftVisualC#Express 2010を使用しています。「低水準」の質問を許してください。しかし、私は他のすべての人の経験より1〜2レベル下にいるように感じます:-/誰かがこれらのDDLファイルをにマージする方法を指摘できればステップバイステップガイドの私のEXE、これは本当に素晴らしいでしょう!

4

14 に答える 14

94

.NETFramework4.5の場合

ILMerge.exe /target:winexe /targetplatform:"v4,C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0" /out:finish.exe insert1.exe insert2.dll

ILMerge

  1. CMDを開き、ディレクトリにcdします。まあ言ってみれば:cd C:\test
  2. 上記のコードを挿入します。
  3. /out:finish.exe必要なファイル名に置き換えfinish.exeます。
  4. 背後には、/out:finish.exe結合したいファイルを指定する必要があります。
于 2012-04-13T09:08:11.523 に答える
34

Costura.Fodyを使用します。

nugetインストールしてから、ビルドを実行するだけです。最終的な実行可能ファイルはスタンドアロンになります。

于 2016-11-24T12:15:57.420 に答える
25

ilmergeilmergreguiをダウンロードします。ファイルの結合がとても簡単になり、これらを使用してうまく機能します

于 2013-02-21T23:48:23.703 に答える
18

DLLをリソースに参照し、AssemblyResolve-Eventを使用してResource-DLLを返します。

public partial class App : Application
{
    public App()
    {
        AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
        {

            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;
        };
    }
}
于 2012-04-13T09:31:24.613 に答える
10

ダウンロード

ILMerge

電話

ilmerge /target:winexe /out:c:\output.exe c:\input.exe C:\input.dll
于 2012-04-13T09:10:37.163 に答える
9
  1. 他のスレッドが指示するようにILMergeをインストールします

  2. 次に、デフォルトでインストールフォルダに移動します C:\Program Files (x86)\Microsoft\ILMerge

  3. DllとExesをそのフォルダにドラッグします

  4. Shiftキーを押しながらそのフォルダを右クリックし、コマンドプロンプトを開くを選択します

  5. 書く

    ilmerge myExe.exe Dll1.dll /out:merged.exe
    

    最初にexeを作成する必要があることに注意してください。

マージされたexeファイルがあります。これを複数回行う場合、これは最善の方法ではないかもしれませんが、1回限りの使用で最も簡単な方法であるため、Ilmergeをパスに配置することをお勧めします。

于 2012-04-13T09:15:51.127 に答える
6
static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
    /* PUT THIS LINE IN YOUR CLASS PROGRAM MAIN() */           
        AppDomain.CurrentDomain.AssemblyResolve += (sender, arg) => { if (arg.Name.StartsWith("YOURDLL")) return Assembly.Load(Properties.Resources.YOURDLL); return null; }; 
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
}

まず、DLLをプロジェクトに追加します-リソース。「リソース」フォルダを追加します

于 2013-10-03T13:24:14.677 に答える
4

2019アップデート(参考のために):

.NET Core 3.0以降、この機能はすぐにサポートされます。単一ファイルの実行可能ファイルの公開を利用するには、プロジェクト構成ファイルに次の行を追加するだけです。

<PropertyGroup>
  <PublishSingleFile>true</PublishSingleFile>
</PropertyGroup>

これで、dotnet publish外部ツールを使用せずに単一の.exeファイルを生成する必要があります。

この機能の詳細については、https://github.com/dotnet/designs/blob/master/accepted/single-file/design.mdをご覧ください。

于 2019-12-28T11:43:50.547 に答える
2

また 、GUIインターフェイスを備えたcodeplexでilmergertoolを使用できます。

于 2012-05-07T10:51:33.650 に答える
2

これが公式ドキュメントです。これもステップ2で自動的にダウンロードされます。

以下はそれを行うための本当に簡単な方法であり、私はを使用してアプリを正常に構築しました.NET framework 4.6.1

  1. GUIまたはコマンドラインからILMergenugetパッケージをインストールします。

    Install-Package ilmerge
    
  2. ダウンロードしたことを確認してください。今すぐインストールします(このコマンドはわかりませんが、nugetパッケージに移動してください): ここに画像の説明を入力してください 注:複数のソリューションがある場合は、おそらくソリューションの1つにのみインストールする必要があります

  3. ソリューションフォルダに移動すると、パッケージフォルダに実行可能ファイルを含む「ILMerge」が表示されます。

    \FindMyiPhone-master\FindMyiPhone-master\packages\ILMerge.2.14.1208\tools
    

    ここに画像の説明を入力してください

  4. \bin\Debugこれが、自分(またはアプリがビルドされている場所)にコピーして、コマンドライン/PowerShellで次のようなことを実行できる実行可能ファイルです。

    ILMerge.exe myExecutable.exe myDll1.dll myDll2.dll myDlln.dll myNEWExecutable.exe
    

これで、すべてのライブラリを1つにまとめた新しい実行可能ファイルができました。

于 2017-07-15T16:12:20.113 に答える
0

についても同様の質問に答えましたVB.NET。ただし、変換するのはそれほど難しいことではありません。DLL'sをフォルダに埋め込むRessourceと、最初の使用時に AppDomain.CurrentDomain.AssemblyResolveイベントが発生します。

開発中に参照する場合はDLL、プロジェクトに通常の参照を追加するだけです。

DLLをプロジェクトに埋め込む

于 2012-04-13T09:11:04.630 に答える
0

注:ILOnly以外のアセンブリをロードしようとしている場合は、

Assembly.Load(block)

動作せず、例外がスローされます: 詳細

一時ファイルを作成し、を使用してこれを克服しました

Assembly.LoadFile(dllFile)
于 2018-03-25T09:06:31.307 に答える
0

私は以下の解決策がStpesであることがわかりました:-

  1. ILMerge.msiをダウンロードして、マシンにインストールします。
  2. コマンドプロンプトを開く
  3. cd C:\ Program Files(x86)\ Microsoft \ ILMergePreessEnterと入力します
  4. C:\ Program Files(x86)\ Microsoft \ ILMerge> ILMerge.exe / target:winexe / targetplatform: "v4、C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319" /out:NewExeName.exe SourceExeName.exe DllName.dll

複数のDLLの場合:-

C:\ Program Files(x86)\ Microsoft \ ILMerge> ILMerge.exe / target:winexe / targetplatform: "v4、C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319" /out:NewExeName.exe SourceExeName.exe DllName1.dll DllName2.dll DllName3.dll

于 2018-05-03T13:53:07.383 に答える
-2

コマンドは次のスクリプトである必要があります。

ilmerge myExe.exe Dll1.dll /target:winexe /targetplatform:"v4,c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\" /out:merged.exe /out:merged.exe
于 2017-02-02T10:52:34.520 に答える