web-dev-qa-db-ja.com

ビルドシステムによって既に参照されているSystem.Coreへの参照を追加します

プロジェクトがビルドされても、Visual Studio Intellisenseは動的キーワードを認識しません。問題を解決するために、System.Coreへの参照を追加しようとしました。私はこのエラーを受け取ります:

「System.Core」への参照を追加できませんでした。このコンポーネントは、ビルドシステムによってすでに自動的に参照されています。

他のプロジェクトがSystem.Coreを参照していることに気付きました。私の修正は、csprojを直接編集して追加することで、Intellisenseが修正されました。何が得られますか? VSがUIを介して実行できないのはなぜですか?

34
Shaun Luttin

いくつかの調査を行った結果、以前のSOチケットといくつかのブログが見つかりましたが、最終的にはすべて同じ回避策を使用してしまいました。その後、 バグレポート 2011年に誰かがMicrosoft Connectに提出したが、最終的には1年ほど後にMSFTの従業員であるチャック・イングランドによって回答された。

TL; DR-VS2008に追加された multi-targeting 機能により、チームが行った意識的な決定でした(変更可能プロジェクトの.NET Frameworkターゲット)。

ターゲットフレームワークには「System.Core」が必要であり、それを削除するとビルドが妨げられるため(Chuckの答えが理解できる限り)であるので、そうしなくても参照を強制することにしました。実際に参照のリストでそれを参照してください。

ちょっとした「安全な」ハックは、それを参照に再度追加しようとするとエラーがスローされるという望ましくない副作用があり、プロジェクトファイルを直接編集する必要が生じると言うかもしれません。


Microsoft Connectは2018年に廃止されましたが、受け取った回答の組み合わせを次に示します。

はい、経験は素晴らしいものではありません。 System.Coreは必須であるため、削除しないでください。参照を削除した場合でも追加して、これを修正しました。 [A]あなたが見たメッセージは、System.Coreが暗黙的に参照されていることを示しています。そのため、プロジェクトファイルから行を物理的に削除する以外、削除したという事実は、ビルドを変更していません。

これを可能にしたい正当なシナリオがありますが、これは非常にエッジの効いたコーナーケースです。ただし、追加するとエラーが生成されるという事実を盲目的に無視する必要があります。これの多くは、マルチターゲティングを理解せず、単にクリーンアップされなかった以前のバージョンによって私たちに課せられました。

[Y] ouは、プロジェクトノードを右クリックして[アンロード]を選択することで、手動で追加できます。プロジェクトノードを再度右クリックして、[編集]を選択します。エディターで、別の参照行(たとえば、「System」の行)をコピーし、同じItemGroup内の元の参照の下に貼り付けます。参照名を「System.Core」に変更します。プロジェクトノードを右クリックし、[再読み込み]を選択します。保存して再ロードするには、質問に対して「はい」を選択します。

VS2008はマルチターゲティングを正しく処理しませんでした。正当ではないものを構築することができます。 VS2010では、ターゲットフレームワーク用にビルドする場合、ターゲットフレームワーク上で実行されるように非常に一生懸命努力しました。これが真実ではない場所を知っているとは言えません。

マルチターゲティングを理解していないため、VS2008の方法に戻ることはできません。 .NET 4.0フレームワークのクライアントプロファイルのような真の「プロファイル」も理解していませんでした。実際、表示されている問題は、VS2008システムがマルチターゲティングを処理するためにアップグレードされたためであり、参照を拒否しているのは新しいルールのセットです。

この場合、参照を削除してもビルドされます。あなたは言うかもしれませんが、それは構築されるべきではありません。ただし、ターゲットフレームワークで実行されるため、ビルドする必要があります。 「必要な」参照を追加したという事実は、それがどのように開発されたかという点で、やや壊れた経験です。

私たちは本当にこれを十分に早く見つけられず、リリース前に修正するためにそれを修正する方法を本当にしっかりと理解していました。ただし、常に参照する必要があり、したがって "System.Core"を削除する必要がないという事実により、これは修正されません。

37
Grant

@Arthurの答えに基づいて、2つのことが解決されたことがわかりました。

.csprojファイルに不足している行を追加します。

<Reference Include="System.Core" />

次に、forums.asp.netの回答に従って、メインweb.configにSystem.Coreアセンブリ参照を追加します(Viewsの下にないもの):

  <system.web>
    <compilation debug="true" targetFramework="4.7.1">
      <assemblies>
        <add Assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        <add Assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
        <add Assembly="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      </assemblies>
    </compilation>
    <httpRuntime targetFramework="4.7.1" />
    <!-- ... ... -->
  </system.web>

次に:

1)web.configのコンパイルプロパティの.NETフレームワークのバージョンがプロジェクトプロパティで指定されているものと同じであることを確認します。

2)ビューフォルダーweb.configのMVCアセンブリのバージョンが、プロジェクトで使用しているMVCアセンブリと同じであることを確認します。

3)Visual Studio(2017はこちら)を再起動します。

お役に立てれば。

11
woohoo

これらの行を.csprojファイルに手動で追加して回復しました。

<Reference Include="System" />
<Reference Include="System.Core" />
5
Arthur


こんにちは、この投稿はすでに古いことは知っていますが、まだ解決策を探している人は、これがあなたの助けになることを願っています。 ImはSystem.Core dllを誤って削除したため、同じ問題に直面しています。

そして、そのDLLをC:\ Program Files(x86)\ Reference Assemblies\Microsoft\Framework.NETFramework\v4.6.1\System.Core.dllからコピーしたそして、これらのライブラリをプロジェクトビンに貼り付けました。

後で、プロジェクト内でdllが参照に自動的に追加されることがわかります。その後、vsを再起動すると動作します! Goodluck nが問題を解決できることを願っています

1
warabino