web-dev-qa-db-ja.com

ASP.NET Core-生成されたweb.configの間違ったprocessPath

奇妙な問題があります。

現在取り組んでいるアプリケーションの1つが、Azure Web Appへの発行後に機能しなくなりました。ローカルですべて正常に動作します。長い調査の結果、犯人は(VSTFSでの)ビルドによって生成されたweb.configに次のものが含まれていることです。

_<aspNetCore processPath=".\SomeServiceName.Api " stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />_

正しいものは次のとおりです:_<aspNetCore processPath=".\SomeServiceName.Api.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />_

不足している.exeに注意してください。

プロジェクトのビルド出力は、コンソールアプリケーションに設定されます。 ASP.NET Coreアプリであり、完全なフレームワークで実行されます。ビルドは、VSTSの_Visual Studio Build_タスクを使用して、次のMSBuildArgumentsで実行されます。

/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)"

MSBuild CLIを使用して、同じコマンドライン引数で開発マシンでビルドを実行すると、次のようになります。

_<aspNetCore processPath="dotnet" arguments=".\SomeServiceName.Api.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />_

プロジェクトは_<Project Sdk="Microsoft.NET.Sdk.Web">_を使用しています。

プロジェクトにweb.configを追加するだけで(現時点ではありません)、ソース管理で希望どおりの方法で制御できます。これにより、展開が壊れるという差し迫った問題が修正されます。しかし、私は知りたいです:

  1. VSTSのビルドによって生成されたweb.configは明らかに間違っています。これはMicrosoft.NET.SDK.Webのバグですか?
  2. 実際のビルドサーバーにアクセスできません。唯一の合理的な説明は、誰かが.netコアSDKを更新したことだと思います。これが、動作が変更された理由です。これは理にかなっていますか? msbuildターゲットは.NET Core SDKからのものですか、それともVisual Studioの一部ですか?
  3. マシンで別のweb.configを取得しています。何故ですか?

更新
ここでつまずく人のために、githubの問題のリンクは次のとおりです: https://github.com/aspnet/websdk/issues/408
これは修正され、いつの日か一部のリリースの一部となるようです(ただし、リリースサイクルが何かはわかりません)。

11
Botis

まったく同じ問題があり、先週解決しました。 2つのASP.Net Coreプロジェクトがあり、1つは問題を示し、もう1つは問題がありませんでした。そこで、2つの.csprojファイルを比較しました。

今回のケースでは、削除する必要があるのは

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
  <PlatformTarget>AnyCPU</PlatformTarget>
</PropertyGroup>

.csprojのプロパティ。これが完了すると、MSBuildは、processPathの最後にある.exeを含むweb.configを正しく作成しました。

3
LoZeno

そこに.exeを取得するためのいくつかのオプション。これらの方法はそれぞれ私にとってうまくいきました:

  1. ビルド構成をDebug(デフォルト)からReleaseに切り替えます。

    dotnet publish -c Releaseまたはmsbuild引数/p:Configuration=Release

  2. プロジェクトのルートに好きな方法でweb.configを作成し、次の行をプロジェクトファイルに追加して、SDKに触れないように指示します。

    <PropertyGroup> <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled> </PropertyGroup>

  3. https://docs.Microsoft.com/en-us/dotnet/core/rid-catalog にリストされているwin- *ランタイムの1つとしてターゲットランタイムを指定します。 exe拡張子を追加しているように見えるコードは次のとおりです。

    https://github.com/aspnet/websdk/blob/6b898ad0a39329ab5f0db281a9c1712e4303ed61/src/Publish/Microsoft.NET.Sdk.Publish.Targets/netstandard1.0/TransformTargets/Microsoft.NET.Sdk.Publish.TransformFiles。ターゲット#L44

1
phehr

まったく同じ問題があり、先週解決しました。 2つのASP.Net Coreプロジェクトがあり、1つは問題を示し、もう1つは問題がありませんでした。

最初にC:\ Program Files\dotnetパスを確認します。sdkフォルダーが使用できない場合は、asp.netコアsdkをインストールする必要があります。このパッケージをインストールすると、問題は解決します。アプリは<aspNetCore processPath="dotnet" arguments=".\yourapp.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout"/>で実行されています

0
a patidar