ビルドエラー:System.Runtimeへの参照を追加する必要があります


209

まったく新しいASP.NET MVC 5.1ソリューションを準備しています。NuGetパッケージを追加して、Zurb Foundationなどで設定しています。

その一部として、ポータブルクラスライブラリである社内NuGetパッケージへの参照を追加しましたが、これがビルドサーバーで問題を引き起こしていると思います。

TeamCityはビルドに失敗します:

タイプ 'System.Object'は、参照されていないアセンブリで定義されています。アセンブリ 'System.Runtime、Version = 4.0.0.0への参照を追加する必要があります

私は元々、Razor Webページをコンパイルするときの同じまたは同様のエラーの修正を追加しました。 web.config

<compilation ... >
  <assemblies>
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </assemblies>
</compilation>

ただし、問題は未解決です。

回答:


216

修正を実装するには、最初に、デフォルトで次のような既存のweb.configコンパイルセクションを展開します。

<compilation debug="true" targetFramework="4.5"/>

展開したら、指示に従って次の新しい構成XMLを追加しました。

  <assemblies>     
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />   
  </assemblies>

最終的なweb.configタグは次のようになります。

<compilation debug="true" targetFramework="4.5">
  <assemblies>     
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />   
  </assemblies>
</compilation>

2
この問題は、既知のPCLではなく、多くのnuGetパッケージを対象とする4.52をターゲットとするMVCプロジェクトに侵入しました。VS2013のアンインストールがこれを引き起こしたと私は信じていますが、実際にはそれがわかりません。X-PagedListを参照するビューでのみエラーが発生しました。プロジェクトweb.config(view web.configではない)への参照を追加することで修正されました。
グレッグテレル

1
@GregTerrell X.PagedListの古いバージョンからアップグレードした後、ちょうどこの問題が発生しました。とてもイライラします。参照の追加が機能し、.vsプロジェクトを閉じた後、フォルダを削除(名前を変更)し、再度開いて、web.configエントリを削除すると、ビルドと実行が正常に行われました。
Mardoxx

@Mardoxx同じ問題が発生しています。VSまたはX.PagedListに問題がありますか?VSバグの場合、web.configにパッチを適用できますが、X.PagedListに問題がある場合は、.configファイルを変更したくありません。
Jecoms

@Jecoms私はあなたのgithubの問題に返信しました:) github.com/kpi-ua/X.PagedList/issues/49#issuecomment-243515362
Mardoxx

3
MoreLINQを.Net 4.5.1プロジェクトにインストールした後、このエラーが発生しました。この回答で解決しました。
Chris Moschini 2017年

125

このSystem.Runtime.dllアセンブリへの参照を追加すると、問題が修正されました。

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Facades\System.Runtime.dll

ただし、その明示的なパスにあるそのファイルはビルドサーバーに存在しません。

PCLとこれらのファサードに関するドキュメントを見つけたら、詳細を投稿します。

更新

ええ、インターネット全体のファサードアセンブリにはほとんど何もありません。

Google:

(Facades OR Facade) Portable Library site:microsoft.com

2
あなたが指定したフォルダにあるDLLファイルを見つけることができない場合で説明したように、あなたは、Windows SDKをインストールすることができます。stackoverflow.com/a/14517992/3918598
user3918598

ありがとう。上記のリンクは、4.5.1 SDKのインストール後に機能しました。
Matt Beckman

40
これに対処するMicrosoftサポートに関するKB記事があります。
Peter Majeed、2015年

1
@PeterMajeed本当にそのコメントをここの回答として投稿してください。先端をありがとう!
julealgon 2015年

3
これを機能させるには、「ローカルのコピー」をtrueに設定する必要がありました
Phate01

28

私のために働いた唯一の方法。アセンブリをweb.configに追加する

<compilation debug="true" targetFramework="4.5">
  <assemblies>     
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />   
  </assemblies>
</compilation>

1
ロレーナ、ありがとう!私のために働いた
Annia Martinez

ワンライナーで動作し、ライブラリへのパスに依存せず、何もインストールする必要がなく、受け入れられる必要があります!)
Ivan Zverev

この回答は、@ Baahubaliによるトップ投票の回答と同じです
Jesper Mygind

27

承認された回答での@PeterMajeedのコメントは、関連する問題の解決に役立ちました。ポータブルライブラリを使用していませんが、TeamCityを実行しているWindows Server 2012の新規インストールで同じビルドエラーが発生します。

Microsoft .NET Framework 4.5.1 Developer Packをインストールすると、この問題が解決されます(MSビルドツールを個別にインストールした後)。


5
4.6をどうするかについてのアイデアはありますか?周りに開発者パックは見当たりません。
georgiosd 2015

4
4.5.1と4.5.2の両方の開発パックを持っていますが、まだこのエラーが発生します。アイデア?私の25のプロジェクトすべてでそれを参照したくありません。いくつかの理由で、他の25はそれを必要としません。
abatishchev 2015

良い質問-少なくともビルド自動化の観点からは、4.5.2や4.6にはまだ対応していません。
sfuqua 2015

行き詰まっている場合は、無料のVisual Studio Community Service Editionをいつでも表示して、最新の状態に保つことができます。
ルークPuplett 2015年

これらの開発者パックをインストールする必要がある理由がわかりません。VS2013 Proをインストールしました。それで十分ではありませんか?しかし、ここで問題は解決しました。ありがとう。
Mike de Klerk、2016年

10

VS 2015の一部のソリューション(MVCではありません)でこの問題が発生しました。1つのワークステーションの同じソリューションでも、別のワークステーションでは発生しませんでした。.NETバージョンを4.6に変更し、PCLを参照すると、エラーが発生し始めました。

ソリューションは簡単です。ソリューションを閉じて、ソリューションと同じフォルダー内の非表示の.vsフォルダーを削除します

他の回答で提案されているように欠落している参照を追加することでも問題は解決しますが、参照を再度削除した後でもエラーは解決されたままです。

TeamCityについては、構成に問題がなかったため、言うことはできません。ただし、デバッグ作業の一環として作業カタログをリセットするようにしてください。


6

それは古い問題ですが、継続的インテグレーションサーバーのビルドパイプラインを修正するために、今日直面しました。追加

<Reference Include="System.Runtime" />

私の.csprojファイルに私のために問題を解決しました。

少しコンテキスト:関心のあるプロジェクトは、開発マシンでのビルドの問題のない完全な.Netフレームワーク4.6.1プロジェクトです。この問題は、私たちが制御できないビルドサーバーでのみ発生します。SDKのバージョンが異なるなどの原因が考えられます。

Visual Studioで参照警告(参照ツリーに追加されたエントリの黄色の三角形)が欠落<Referenceしているという犠牲を払って、提案されたビルドエラーを追加すると、ビルドエラーが解決されました。

これが同様のシナリオの人々に役立つことを願っています...


同様の文脈の中で私も解決しました
Nicola Celiento '16

3

.NETランタイムと、ターゲットとする.NETバージョンのターゲットパックをインストールします。

開発者パックは、これら2つがバンドルされているだけですが、現時点では4.6バージョンではないため、2つのアイテムを個別にインストールする必要があります。

ダウンロードはここにあります:http : //blogs.msdn.com/b/dotnet/p/dotnet_sdks.aspx#


3

エラーなしでコンパイルされたにもかかわらず、コードベースをマイナーアップデートした後、ASP .NET MVCプロジェクトを実行しようとするこの問題にも直面していました。

コンパイラのエラーメッセージ: CS0012:型 'System.Object'は、参照されていないアセンブリで定義されています。アセンブリ 'System.Runtime、Version = 4.0.0.0、Culture = neutral、PublicKeyToken = b03f5f7f11d50a3a'への参照を追加する必要があります。

私たちのプロジェクトはこの問題に遭遇したことがなかったので、根本的な原因を見つける前に構成ファイルを変更することに懐疑的でした。エラーログから、実際に何が起こっているのかを指摘するこの詳細なコンパイラ出力を見つけることができました。

警告CS1685:事前定義されたタイプ 'System.Runtime.CompilerServices.ExtensionAttribute'は、グローバルエイリアスの複数のアセンブリで定義されています。'c:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ mscorlib.dll'の定義を使用

c:\ Users \ Admin \ Software Development \ source-control \ Binaries \ Publish \ WebApp \ Views \ Account \ Index.cshtml(35,20):error CS0012:type 'System.Object' is defined in the assembly that is参照されていません。アセンブリ 'System.Runtime、Version = 4.0.0.0、Culture = neutral、PublicKeyToken = b03f5f7f11d50a3a'への参照を追加する必要があります。

c:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files \ meseems.webapp \ 68e2ea0f \ 8c5ee951 \ assembly \ dl3 \ 52ad4dac \ 84698469_3bb3d401 \ System.Collections.Immutable.DLL:(関連するシンボルの場所前のエラーへ)

プロジェクトに追加された新しいパッケージが古いバージョンの.NET Frameworkを参照していたため、「複数のアセンブリでの定義」の問題(CS1685)が発生し、実行時にかみそりビューコンパイラエラーが発生したようです。

互換性のないパッケージ(System.Collections.Immutable.dll)を削除したところ、問題は発生しなくなりました。ただし、プロジェクトでパッケージを削除できない場合は、Baahubaliの回答を試す必要があります


2

Tfs 2013ビルドサーバーでは、テストプロジェクトで同じエラーが発生しました。メインWebプロジェクトが.Net 4.5.1で実行されている。

システムランタイムのnuGetパッケージをインストールし、packages \ System.Runtime.4.3.0 \ ref \ net462 \ System.Runtime.dllから参照を追加しました

それで解決しました。


.NET 4.5.1プロジェクトで.NET 4.6.2 DLLを使用するように指示しているので、おそらく機能しないはずです
Chris Marisic

1
..そして、それでも私にとってはうまくいきました。... \ 45 \ ...フォルダーには、呼び出されるスタブファイルのみが含まれるため、選択の余地はありません _._
nathanchere



1

この問題は、Web APIプロジェクトといくつかのライブラリプロジェクトのソリューションで発生しました。ライブラリプロジェクトの1つがビルドを開始していて、Unity属性が「有効な」属性ではないというエラーがあり、1つのエラーがSystem.Runtimeを参照する必要があると言っていました。

たくさん検索して、4.5.2 Developer Packを再インストールしましたが、何も機能しませんでしたが、バージョンの不一致に過ぎな​​いと思いました。したがって、すべてのプロジェクトのプロパティを調べたところ、非常に基本的なライブラリの1つが4.5をターゲットにし、他のすべてのライブラリは4.5.2をターゲットにしていました。4.5.2もターゲットとするように変更すると、エラーはなくなりました。


1

「C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.5.1 \ Facades \ system.runtime.dll」というファイルを本番サーバーのbinフォルダーにコピーすると、問題が解決します。


もう1つの方法は、プロジェクトにこのアセンブリへの参照を追加し、Copy Local = Trueを設定することです。
John Mc


0

私にとってはこのコード行だけを助けました:

Assembly.Load("System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");


-1

Nuget Package Managerの参照を削除して再度追加すると、問題が解決しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.