2017-08-09 5 views
1

私はチーム内の複数のプロジェクトが実行可能ファイルを呼び出すことができるようにNugetパッケージに変換しようとしているC#このプロジェクトは.csprojファイル内のAfterResolveReferencesステップにあります。これは動作し、「ツール」ディレクトリに私の実行可能ファイルを含んでいるNugetパッケージを作成しMSBuildのNugetパッケージの "tools"フォルダ内の実行可能ファイルを参照できません

<package ...> 
    <metadata> 
    ... 
    <files> 
     <file src="bin\Release\*.*" target="tools" /> 
    </files> 
    </metadata> 
</package> 

私はこのようになります.nuspecファイルとうまくNugetパッケージを作成しました。問題は、格納フォルダに頻繁に変更されるNugetパッケージのバージョン番号が含まれていることです。私は.csprojファイルに次のようにそれを参照しようとしている:

<Target Name="AfterResolveReferences"> 
    <Exec Command="$(SolutionDir)packages\PackageName.1.2.3\tools\AssemblyName.exe" /> 
</Target> 

私はパスでPackageName.1.2.3が含まれている場合、それは期待通りに動作しますが、これは明らかに非常に脆いソリューションです。私が "AssemblyName.exe"を使用すると、 "AssemblyName.exeがコード9009で終了しました"というメッセージが表示されます。

MSBuildとNugetは私の最強のスーツではありませんので、何かアドバイスをいただければ幸いです。

実際にここで達成しようとしているのは、TypeLite.Libパッケージを使用して、モデルプロジェクトで定義されたC#クラスから派生したインターフェイスを含むTypeScriptファイルを作成することです。 WebプロジェクトのTypeScriptコードはこの出力に含まれるインターフェイスに依存するため、TypeScriptファイルはWebプロジェクトの作成前に作成する必要があります。私はこの問題を解決するより洗練された方法の提案にはオープンですが、私は依然として参照問題を解決する方法を知りたいと思っています。

答えて

1

NuGetパッケージは自己完結型でなければなりません。つまり、ユーザーは、ナゲットパッケージを使用するときにプロジェクトファイルに何も追加する必要はありません。

NuGetパッケージには、PackageName.targetsディレクトリをbuildディレクトリに置くと、NuGetパッケージを参照するプロジェクトに自動的に組み込まれます。そこからターゲットを定義し、通常は$(MSBuildThisFileDirectory)..\tools\MyTool.exeを使用してツールを参照します。

packagesディレクトリのみpackages.configを経由せず、NuGetパッケージを参照する新しいスタイルのPackageReference方法については、「古典的」NuGetの参照のために使用されているので、これは重要であるすべてのプロジェクト/ソリューションを共有ユーザー・レベルのグローバル・パッケージ・キャッシュ(ソリューションローカルコピーはありません)。

+0

ありがとうマーティン、本当に役に立ちます。私はこの方法でやろうとしますが、私は今重要なものを取り除きました。 MyTool.exeのパラメータは、消費するプロジェクトによって定義する必要があります(私は.csprojファイルでこれを実行していましたが、消費しているプロジェクトのweb.configにあった方が良いでしょう)。 MyTool.exeが消費するプロジェクトの設定ファイルを読み込むための論理的なメカニズムはありますか? – wwarby

+0

プロジェクトで設定できるカスタムプロパティはいつでも定義/使用できます –

+0

このメソッドを使用して作業しました。ありがとうございました! – wwarby

関連する問題