2016-09-06 6 views
0

私はiTextSharp pdfライブラリを使用してC#でPDFファイルを作成しています。 ressources( "projektname" -propertiesの下)にライブラリファイルを追加することができますので、私は単にユーザーにプログラムをインストールせずに.exeを与えることができます。ライブラリをリソースとして追加することは可能ですか?C#

iTextSharp

これは私が単に(ごめんそのドイツ)、それをインストールすることなく、デバッグフォルダからexeファイルを実行しようとすると、私が取得エラーです。

error box

にはどうすればファイルを追加することができ、それが動作するか、またはそれを行うには良い方法があります。

+1

は、プロジェクト参照にそれを追加し、確認して「ローカルコピー」ILマージ使用することができます。それからあなたの "bin"フォルダにビルド時に含まれます。 .exeだけを提供することはできません。.dllも含める必要があります。あなたが本当に必要ならば[exeファイルにバンドルする方法](http://stackoverflow.com/questions/189549/embedding-dlls-in-a-compiled-executable)があります。 – musefan

+0

@musefanあなたは正しいです! –

+1

ILMergeと呼ばれるユーティリティは、すべてのdllファイルを1つのexeファイルにパッケージ化できますが、ITextSharpのライセンスが許可されていないと感じています。 – Crowcoder

答えて

4

することができますはい:

  1. を開き、プロジェクトのプロパティ、リソース]タブに移動して選択し、 "リソースの追加>既存のファイルの追加"( "Ressourcehinzufügen> Vorhandene Dateiのhinzufügenを")。 DLLを選択します。それはリソースのどこかの "ファイル"または "その他"の下に表示されます。
  2. アプリケーションの起動時にそれが存在するかどうかを確認し、あなたのコードでは

を以下のようにファイルにリソースからそれをコピーします。以下は、WinFormsを使用していることを前提としています。そうでない場合は、コードをWPF Appクラスに追加することもできます。 WPFアプリケーションの起動時に呼び出されるメソッドをオーバーライドできます。

static void Main() 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 

    string dllPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "filenameofdll.dll"); 
    if (!File.Exists(dllPath)) 
    { 
     byte[] fileBytes = Properties.Resources.<resourcename>; 
     File.WriteAllBytes(dllPath, fileBytes); 
    } 

    Application.Run(new Form1()); 
} 

<resourcename>上記のコードはあなたのリソースの名前になります。 IntelliSenseによって自動完成されている必要があります。

これは、上記のコードを実行した後にのみDLLが使用される場合にのみ有効です。 DLLは、DLLのクラスの最初のインスタンスが作成されたときにのみロードする必要があります。

免責事項
これにライセンスの影響があるかどうかはわかりません。違法行為をしていないことを確認してください。また、上記は、アプリケーションがフォルダへの書き込み権限を持っている場合にのみ機能します。

+0

だから、私はユーザーにアプリケーションを与えているとき、私はフォルダを含める必要がありますか? –

+0

@ Mr_BlackHawk7いいえ!私が言ったことを試してください。 DLLはバイナリリソースとしてexeファイルに含まれ、アプリケーションが初めて起動されたときに "抽出"されます。ちょうどステップに従ってください...ステップ1と2を省き、ステップ3で "リソースの追加"ボタンを使い、DLLを選択するだけです。その後、単にリソースに追加する必要があります。 –

+0

@ThorstenDittmarライセンスに関する質問は、ソフトウェア全体のライセンスが分かっている場合にのみ回答することができます。 –

関連する問題