web-dev-qa-db-ja.com

タイプ 'Object'は、参照されていないアセンブリで定義されています(NET Standard 2.0 / .NET Framework 4.6.1)

クラスライブラリのベースとなる 。NET Standard 2. プレビューを使用しています。

特にアーカイブの抽出に関して、いくつかのNuGetパッケージで問題が発生した後、.NET Core 2.0コンソールプロジェクトを.NET Framework 4.6.1に戻すことにしました。

.NET Framework 4.6.1は、さまざまなソースによると、.NET Standard 2.0仕様を実装することになっています。特に、 dotnet/standard GitHub Repo

Net Standard Implementation by Net Framework and Core

残念ながら、.NET Frameworkへの移行により、すべての.NET Frameworkコンソールプロジェクトで次のエラーが発生しました。

エラーCS0012型 'Object'は、参照されていないアセンブリで定義されています。アセンブリ 'netstandard、Version = 2.0.0.0、Culture = neutral、PublicKeyToken = cc7b13ffcd2ddd51'への参照を追加する必要があります。

Objectは何でも構いません:EnumTask、...

このようなエラーを取得せずに、.NET Framework(4.6.1)で.NET Standard 2.0クラスライブラリを参照するにはどうすればよいですか?

33
jAC

最新の2.0およびVS 15.3を使用した後でも、この問題が発生しました。しかし、私の問題は異なっていたと思います。 Core 1.1から2.0にアップグレードした後、何らかの理由で、私の.webの.csprojには<RuntimeFrameworkVersion>1.1.2</RuntimeFrameworkVersion>がありました。これにより、プロジェクトは正しい2.0バージョンをターゲットにできませんでした。

クラスライブラリ(.Layer)プロジェクトには<NetStandardImplicitPackageVersion>1.6.1</NetStandardImplicitPackageVersion>がありました。

私は両方を削除し、私のプロジェクトはついに2.0の使用を開始し、その後すべてがうまくいきました。

26
FerX32

以下のようにweb.configにnetstandardへの参照を追加してみてください。

<system.web> 
   <compilation debug="true" targetFramework="4.7.1" > 
      <assemblies> 
         <add Assembly="netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51"/> 
      </assemblies> 
    </compilation> 
</system.web>
20
OMID

NET Core 2.0プレビュー2をインストールし、Visual Studio 2017プレビューの最新バージョン(15.3)に更新すると、参照が自動的にインストールされます。

これによると GitHub issue 、同様の問題に対処するには、.NET Frameworkプロジェクト内のNETStandard.Library.NETFrameworkパッケージへの参照を手動で追加する必要があります now *

NuGetコンソール経由でインストールします。

Install-Package NETStandard.Library.NETFramework -Version 2.0.0-preview1-25305-02 -Pre

数日前、NET Core/Standard 2.0プレビュー2がリリースされました。更新する場合は、次のバージョンが必要です。

Install-Package NETStandard.Library.NETFramework -Version 2.0.0-preview2-25405-01 -Pre

または、NuGetストア経由で(プレリリースバージョンを表示)を確認し、NETStandard.Library.NETFrameworkを検索します

これにより、参照が解決され、エラーが消えます。

* Joperezr は、Microsoftが後でツールでこれを処理することを計画していることを示しています。

現時点では、このパッケージへの参照を手動で追加する必要がありますが、これは迷惑になる可能性がありますが、今後はこれを行うツールを計画しています。

12
jAC

私のようにこの問題を抱えている人がいる場合に備えて

visual Studio 2017バージョンを> 15.3に更新します(ヘルプでバージョンを確認する->トップメニューから)、バージョン15.2があり、このエラーが表示されました。その後、Visual Studioのバージョンを更新し、修正しました。

2
ankur

Visual Studio 2017とC#UWPアプリを使用しています。このエラーが発生し、多くのクラスでプロジェクトでこのエラーが発生しました。ソリューションエクスプローラーでプロジェクトのReferencesフォルダーを右クリックし、[参照の追加]をクリックして修正しました。次に、ポップアップの下部にある[参照]ボタンを選択しました。

ファイルエクスプローラーに移動します。ここで適切なファイルが見つかります。

C:\ Program Files(x86)\ Microsoft Visual Studio\2017\Community\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\netstandard.dllまたは.NET Core 2.0 SDKから見つけることができますC:\Program Files\dotnet\sdk\2.0.0\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\netstandard.dll

追加すると、すべてのエラーがなくなりました。

1
Azurespot

プロジェクトをサブフォルダーに物理的に移動すると、NuGetパッケージ参照(パスヒント)が破損するため、この例外が自分で発生しました。 csprojファイルで修正すると、すべてが再び正常に戻りました。

0
DotBert

Visual Studioの更新により多くの人が問題を解決したと聞いてうれしいです。ただし、バグやその他の問題があるため、.NET Framework 4.6.1プロジェクトから.NET Standard 2.0ライブラリを使用することはお勧めできません。可能であれば、代わりに4.7.2以降を使用する必要があります

Immo Landwerth、Microsoftの.NETチームのプログラムマネージャー tweeted

申し訳ありませんが、台無しになりました。 .NET Framework 4.6.1に遡って.NET Standard 2.0を実装しようとしました。タイムマシンがなく、バグの尾があるので、これは間違いでした。

.NET Frameworkから.NET Standard 1.5+を使用する場合は、4.7.2にすることをお勧めします。

。NET標準の比較可能マトリックス は、4.6.1の脚注で更新されました。

ここにリストされているバージョンは、特定の.NET標準ライブラリが適用可能かどうかを判断するためにNuGetが使用するルールを表しています。 NuGetは.NET Framework 4.6.1を.NET Standard 1.5〜2.0をサポートしていると見なしますが、.NET Framework 4.6.1プロジェクトからそれらのバージョン用にビルドされた.NET Standardライブラリを使用することにはいくつかの問題があります。このようなライブラリを使用する必要がある.NET Frameworkプロジェクトの場合、プロジェクトを.NET Framework 4.7.2以降をターゲットにアップグレードすることをお勧めします。

0
Stephen Kennedy

JenkinsなどのCI用MSBuildを使用している場合は、ビルドツールを更新します( https://www.visualstudio.com/downloads/#build-tools-for-visual-studio-2017から再度ダウンロードできます) )そして、「。NET Core build tools」がチェックされていることを確認してください。

参照: https://github.com/dotnet/standard/issues/458

0
Spencer

TestServerを使用してMVCビューをテストすると、テストプロジェクトでこの問題が発生しました。

テストプロジェクト、Webプロジェクト、および関連ライブラリはすべてnetcoreapp2.0でした。

Vs2017を15.5にアップグレードしても機能せず、テスト用の.csprojを次の修正で編集しても機能しませんでした。

<RestoreProjectStyle>PackageReference</RestoreProjectStyle>

<ItemGroup><Reference Include="netstandard" /></ItemGroup>

<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects><GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>

https://github.com/aspnet/Razor/issues/1212#issuecomment-297885722 に従って、これは機能しました:

  <Target Name="CopyDepsFiles" AfterTargets="Build" Condition="'$(TargetFramework)'!=''">
    <ItemGroup>
      <DepsFilePaths Include="$([System.IO.Path]::ChangeExtension('%(_ResolvedProjectReferencePaths.FullPath)', '.deps.json'))" />
    </ItemGroup>    
    <Copy SourceFiles="%(DepsFilePaths.FullPath)" DestinationFolder="$(OutputPath)" Condition="Exists('%(DepsFilePaths.FullPath)')" />
  </Target>
0
user326608