私はこれをより簡単な方法で "解決"(回避策を作成)しました。
ビルド後
dotnet publish "$(ProjectFileName)" --no-build -o pub
xcopy "$(ProjectDir)pub\3rdPartyProvider.*.dll" "$(OutDir)"
pub
公開したものをステージングするためのフォルダです
注:使用しているバージョンによってdotnet.exe
は、コマンドを使用--no-build
できない場合があります。
たとえば、v2.0.3では使用できません。そしてv2.1.402で利用可能です。VS2017 Update4にはv2.0.3が含まれていました。そしてUpdate8には2.1.xがあります
更新:
上記の設定は基本的なデバッグ環境で機能しますが、それをビルドサーバー/実稼働環境に配置するには、さらに多くのものが必要です。私が解決しなければならないこの特定の例ではRelease|x64
、Release|x86
個別にビルドします。それで私は両方を説明しました。しかし、ビルド後のdotnet publish
コマンドをサポートするために、最初RuntimeIdentifier
にプロジェクトファイルに追加しました。
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutputPath>..\..\lib\</OutputPath>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'">
<OutputPath>..\..\lib\</OutputPath>
<RuntimeIdentifier>win-x86</RuntimeIdentifier>
</PropertyGroup>
なぜ私はそれを必要とし、なぜあなたはそれなしで逃げることができるのですか?私はこれが必要だったのでビルドプログラムが警告MSB3270をインターセプトし、表示された場合はビルドを失敗させるように設定されて、。この警告は、「ねえ、あなたの依存関係のいくつかのファイルは間違ったフォーマットです」と言います。しかし、この演習の目標を覚えていますか?パッケージ依存DLLをプルする必要があります。そして、多くの場合、次のポストビルドは気にしないので、この警告が存在するかどうかは重要ではありません。繰り返しますが、これは気にかける私のビルドプログラムです。だから、私は追加しましたRuntimeIdentifier
ため、本番ビルドで使用する2つの構成しました。
フルポストビルド
if not exist "$(ProjectDir)obj\$(ConfigurationName)" mkdir "$(ProjectDir)obj\$(ConfigurationName)"
xcopy "$(ProjectDir)obj\$(PlatformName)\$(ConfigurationName)" "$(ProjectDir)obj\$(ConfigurationName)" /E /R /Y
if $(ConfigurationName) == Release (
dotnet publish "$(ProjectFileName)" --runtime win-$(PlatformName) --no-build -c $(ConfigurationName) -o pub --no-restore --no-dependencies
) else (
dotnet publish "$(ProjectFileName)" --no-build -c $(ConfigurationName) -o pub --no-restore --no-dependencies
)
xcopy "$(ProjectDir)pub\my3rdPartyCompany.*.dll" "$(OutDir)" /Y /R
説明:dotnet publishはobj\Debug
またはを探していobj\Release
ます。ビルドはobj\x64\Release
またはを作成するため、ビルド中にはありませんobj\x86\Release
。1行目と2行目は、この問題を軽減します。3行目ではdotnet.exe
、特定の構成とターゲットランタイムを使用するように指示しています。それ以外の場合、これがデバッグモードのときは、実行時のものや警告は気にしません。そして最後の行では、dllを取得して、出力フォルダーにコピーします。仕事が終わりました。
dotnet publish
ハッキングなのでしょうか?コマンドをビルド後のスクリプトとしてcsprojファイルに含めます。