web-dev-qa-db-ja.com

AutogenerateBindingRedirectsがVisual Studio 2017のWeb.configで機能しないのはなぜですか?

Microsoft.AspNet.WebApi.Client 5.2.4を必要とする.Net Standard 2.0ライブラリへの参照があります。これには、新しいバージョンを使用するためにリダイレクトする必要がある多くの依存関係があります。

パッケージ/依存関係の急増を避けるために、csprojファイルの最初のPropertyGroupを更新しました。

<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>

追加されたバージョンに一致するようにWeb.configを変更する必要がないようにするためにAutoGenerateBindingRedirectsを期待しています。

なぜアセンブリの競合を解決するためにバインドリダイレクトをWeb.configに追加する必要があるのですか?

10
Daniel Leach

AutoGenerateBindingRedirectsは https://docs.Microsoft.com/en-us/dotnet/framework/configure-apps/how-to-enable-and-disable-automatic-bindingごとにWebプロジェクトに対して機能しないようです-redirection

ビルドの出力を調べると、バインディングリダイレクトがWeb.config内ではなく生成されていることがわかります。代わりに、$(AssemblyName).dll.configにあります。このファイルには、Web.configの元の構成とバインディングリダイレクトが含まれています。

すべてをまとめるために、MSBuildで結果の構成をWeb.configにコピーして戻すことができます。これを行うには、csprojに以下を追加します。

<Target Name="AfterBuild">
  <Copy SourceFiles="$(TargetDir)\$(AssemblyName).dll.config" DestinationFiles="Web.config" />
</Target>
16
Daniel Leach

Iis expressの場合:Web.configで、セクションassemblyBindingを

  <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
    <linkedConfiguration href="file:{AssemblyName}.dll.config"/>
  </assemblyBinding>

Iisおよびiis expressの場合:

プロジェクトに追加しますScripts\CopyRuntimeSection.ps1

param ($from, $to)
$projectPath = Resolve-Path "$($PSScriptRoot)\..\"

$fromFilePath = "$projectPath\$from";
$toFilePath = "$projectPath\$to";

$fromFileXml = [xml](Get-Content -Path $fromFilePath -Raw)
$toFileXml = [xml](Get-Content -Path $toFilePath -Raw)

$toFileXml.configuration.runtime.InnerXml = $fromFileXml.configuration.runtime.InnerXml
$toFileXml.Save($toFilePath)

csprojに追加

  <Target Name="CopyRuntimeSection" AfterTargets="Build">
    <Exec Command="PowerShell -File Scripts\CopyRuntimeSection.ps1 -from $(OutDir)\$(AssemblyName).dll.config -to Web.config" />
  </Target>