web-dev-qa-db-ja.com

MSB3644フレームワークの参照アセンブリが見つかりませんでした

次のMSB3644合併症エラーが発生します。

フレームワーク ".NETFramework、Version = v4.0"の参照アセンブリが見つかりませんでした。これを解決するには、このフレームワークバージョンのSDKまたはターゲットパックをインストールするか、SDKまたはターゲットパックがインストールされているフレームワークのバージョンにアプリケーションを再ターゲットします。アセンブリはグローバルアセンブリキャッシュ(GAC)から解決され、参照アセンブリの代わりに使用されることに注意してください。したがって、アセンブリが意図したフレームワークを正しくターゲットにしていない可能性があります。

私が読んだもの here から、それは私のマシン上のアセンブリが「Program Files(x86)」ではなく「Program Files」に保存されていることが原因です。 MSBuildのFrameworkPathOverrideプロパティで修正できます。

このプロパティ(FrameworkPathOverride)をcsprojに追加してみました。

<Project Sdk="Microsoft.NET.Sdk">
  <Import Project="..\..\tools\common.props" />
  <PropertyGroup>
    <TargetFrameworks>net40;net45;netstandard1.2</TargetFrameworks>
    <GeneratePackageOnBuild>False</GeneratePackageOnBuild>
    <FrameworkPathOverride>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0</FrameworkPathOverride>
  </PropertyGroup>
  <ItemGroup Condition=" '$(TargetFramework)' == 'net40' ">
    <Reference Include="System.Configuration" />
  </ItemGroup>
  <ItemGroup Condition=" '$(TargetFramework)' == 'net45' ">
    <Reference Include="System.Configuration" />
  </ItemGroup>
  <PropertyGroup Condition=" '$(TargetFramework)' == 'netstandard1.2' ">
    <DefineConstants>$(DefineConstants);NETSTANDARD</DefineConstants>
  </PropertyGroup>
  <ItemGroup Condition=" '$(TargetFramework)' == 'netstandard1.2' ">
  </ItemGroup>
</Project>

その後、そのエラーは消えますが、すべてのタイプと名前空間を解決することはできず、次のビルド警告も表示されます。

MSB3270ビルドされるプロジェクトのプロセッサアーキテクチャ「AMD64」と参照「C:\ Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll」、「x86」のプロセッサアーキテクチャの間に不一致がありました。この不一致により、ランタイムエラーが発生する可能性があります。プロジェクトと参照の間でプロセッサアーキテクチャを調整するように、またはプロジェクトのターゲットプロセッサアーキテクチャと一致するプロセッサアーキテクチャを持つリファレンスに依存するように、構成マネージャを介してプロジェクトのターゲットプロセッサアーキテクチャを変更することを検討してください。

プロジェクトのターゲットフレームワークをx86に設定すると、警告は消えますが、タイプや名前空間を解決できません。

必要なすべてのフレームワークがインストールされています。

enter image description here

Windows 10でVisual Studio 2017を使用しています。

13
Dave New

同じエラーが発生しました。フレームワークバージョンは私のコンピューターに問題なくインストールされました(この特定のバージョンのフレームワークのインストーラーを実行しても何も行われませんでした-既にインストールされていることがわかりました)。ただし、フレームワークはVisual Studioの「一部として」インストールされませんでした。

私のためにそれを修正したもの:VSインストーラーを実行(再ダウンロード ここから 失われた場合)、Visual Studioで[変更]をクリックし、[個々のコンポーネント]タブに移動して確認します.NETカテゴリにないもの。

CsprojにFrameworkPathOverrideを設定していません。

1
Zonko