エラーCS1705:「参照されているアセンブリよりもバージョンが高い」


109

私はこれについて少し検討してきましたが、まだ解決できていません。次のエラーメッセージが表示されます。

Compiler Error Message: CS1705: Assembly 'My.Model, Version=1.1.4422.23773, Culture=neutral, 
PublicKeyToken=bfde95ba233094b2' uses 
'Common, Version=3.3.4273.24368, Culture=neutral, PublicKeyToken=bfde95ba233094b2' 
which has a higher version than referenced assembly
'Common, Version=3.3.4269.17112, Culture=neutral, PublicKeyToken=bfde95ba233094b2'

c:\WINDOWS\assembly\GAC_MSIL\Common\3.3.4269.17112__bfde95ba233094b2\Common.dll: 
(Location of symbol related to previous error)

WebサーバーはServer 2003を実行しています。私はc:\ windows \ assemblyに行って、実際にはCommon.dllの3つのバージョンがリストされていることに気付きました。リストされている最も高いバージョンは3.3.4269.17112でした

バージョンが3.3.4273.24368のdllをアセンブリディレクトリにコピーしました。次に、コードを再コンパイルして再デプロイしました(おそらくやり過ぎですが、まあ)。新しいセッションでブラウザーを開いてサイトのURLに再度アクセスしても、同じメッセージが表示されます。

Windowsエクスプローラーを使用して、バージョンの高いCommon.dllがリストされていることを確認できます。

この問題を解決するには、さらに何を調べればよいですか?古いバージョンを指すようにアセンブリの参照を変更したくありません。


2
クレイジー*.*バージョン番号。すべてを再構築し、確実にする唯一の方法です。
ハンスパッサント2012

回答:


39

あなたが試すべき3つのアイデア:

  1. すべてのDLLが同じバージョンのCommonに対してコンパイルされていることを確認してください。
  2. ソリューションにファイル参照ではなくプロジェクト参照があることを確認してください。
  3. web.configでバインディングリダイレクトを使用します。(元々はウェイバックマシンにリンクされたバージョン


68

「再構築」が実際には再構築ではなかったため、このエラーが発生しました。

解決策:Visual Studioを閉じて、実際にbinフォルダーを削除してから再構築します。

また、Visual Studioは参照についてうそをつくことがあります。そのためHintPath.csprojファイルを確認してください。


2
これは私のベーコンを救った。ローカルでの運用は問題ありませんでしたが、変更を公開したため、状況はおかしくなりました。オンラインのbinフォルダーの内容を削除すると、同期がとられます。ありがとう!
pStan 2014

40

NuGetを使用している場合は、「ソリューションのNuGetパッケージの管理」にアクセスして、問題の原因となっているパッケージを見つけ、アップデートを実行することをお勧めします。次に、すべてのパッケージを最新バージョンにし、問題を解決します。

それは迅速かつ簡単なので、一撃の価値があります。


2
これで解決しました、ありがとう。私の状況は少し異なりましたが、更新にリストされていなかったため、インストールに移動する必要があり、プロジェクトごとのパッケージバージョンを表示するウィンドウがありました。古いモジュールをcmsの新しいバージョンにアップグレードしていたため、問題のあるパッケージに移動して、それらを選択し、[インストール]をクリックする必要がありました。cmsがnugetを使用するように切り替わったばかりだったかもしれませんが、あなたは私を退屈なものにしてくれましたcsproj編集を。
rtpHarry 2016

3
プロジェクトレベルではなくソリューションレベルでNuGetパッケージを更新してください。
Jess

2
これは確かに間違いなく受け入れられる答えになるはずです。私はこれを読んでいませんが、私の解決策を意図せずに試しましたが、これは魅力のように機能しました。
Baymax

30

私の問題は、バージョンが異なる同じDLLの2つの異なるコピーを参照する2つのプロジェクトがあったことです。両方を削除し、同じdllファイルを参照していることを確認して修正しました。


13

考えられる原因の1つは、2番目のアセンブリがGACにインストールされているときに、バージョン番号の大きい最初のアセンブリがプロジェクトの参照に追加されていることです。これを確認するには、プロジェクト参照でアセンブリをダブルクリックし、オブジェクトブラウザーに同じ名前の別のアセンブリがあるかどうかを確認します。

その場合は、gacutil.exeユーティリティを使用して、GACから2番目のアセンブリをアンインストールします。たとえば、これらが64ビットアセンブリの場合:

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64\gacutil.exe -u <assembly_name>

2年後、あなたの提案は魅力のように機能しました。オブジェクトブラウザで参照を表示すると、参照がソートされました。
ceebreenk 2014年

3

「リファレンス」に移動して、問題の原因となっているdllファイルの新しいリファレンスを追加し、すべてのdllが同じバージョンに対してコンパイルされていることを確認します。それは私のために働く私はそれがあなたのためにも働くことを望みます。


2

私のチームは、ビルド環境でこの問題に遭遇しました。この問題は、.csprojファイルの<HintPath>要素の違いが原因でした。

共通アセンブリには、参照アセンブリを含むディレクトリへの正しい相対パスがありました。依存アセンブリには、以前のディレクトリ構造からのパスがありました。GACがC:\ Program Filesにインストールされている正しいバージョンへの依存の参照を解決したため、ソリューションは開発マシンで正常にコンパイルされました。ビルド環境には、アセンブリがレガシーインストールされていたはずですが(インストールされていないはずですが)、フォールバックしてエラーが発生しました。テキストエディタで<HintPath>を更新すると、問題が修正されました。


2

この問題は、ソリューション内の複数のプロジェクトでnugetパッケージが異なる場合に発生します。

これを修正するには、ソリューションのすべてのプロジェクトを含む共通バージョンにnugetパッケージを更新します


1

同様の問題がありました。私の問題は、同じソリューション内に複数のプロジェクトがあり、それぞれが特定のバージョンのDLLを参照していて、バージョンが異なるということでした。解決策は、すべての参照のすべてのプロパティで「特定のバージョン」をfalseに設定することでした。


1

上記の手順のいくつかを試した後、かなり前にこれが尋ねられたことを知っています。私を助けたのは、次のステップとこの記事でした。

参照を見つけ、PublicKeyTokenを参照されているものから古いものに変更しました。

これもお役に立てば幸いです。



0

手作りのdllのコレクションフォルダに
あなたソリューションは、異なるライブラリーからのDLLファイルのためのごみフォルダがある場合は
libsourcelibs、など
は、Visual Studioで(もみの時間のために)あなたのソリューションを開きます場合は、このトラブルを得ることができます。そして、あなたのdllの収集フォルダがどういうわけか見落とされているか、具体的なdllファイルが見落とされています。

Visual Studioは、それ自体でdllの参照を何かに置き換えようと静かに試みます。VSが成功した場合、新しい参照はローカルソリューションに対して永続的になります。他のクローン/チェックアウト用ではありません。

つまり、<HintPath>無視され、プロジェクトファイル(.csproj)は変更されません。
私の例として

<Reference Include="DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\..\lib\DocumentFormat.OpenXml.dll</HintPath>
</Reference>

DocumentFormat.OpenXml参照されるC:\Program Files (x86)\Open XML SDK\V2.5\libからではありませんsolution\..\libフォルダ。

迅速な回避策

  • あなたのDLLの収集フォルダを確認して復元する
  • ソリューションエクスプローラから行うプロジェクトのアンロードし、再読み込みプロジェクト

適切な回避策は、NuGetパッケージマネージャーに移行することです。


0

SharePointの場合、ルートフォルダーの下にDLLの「bin」フォルダーがないことを確認してください。その場合は、削除してください。(VSで「ローカルのコピー」をfalseに変更します)。


0

Webサイトプロジェクトの参照は、web.configファイルに保存されます。そこでエラーを修正するために参照を更新します。

私は、web.configファイル内の参照を忘れたことに気付く前に、ソリューション内のすべての参照を確認するのに少し時間を費やしました。


0

UnitTestingProjectでも同じ問題が発生しました。MainProjectでは「System.Web.Mvc、Version = 3.0.0.0」を使用し、UnitTestingProjectでは「System.Web.Mvc、Version = 3.0.0.1」を使用しました。

で以下を変更します <Reference Include="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <HintPath>..\packages\Microsoft.AspNet.Mvc.3.0.50813.1\lib\net40\System.Web.Mvc.dll</HintPath> </Reference>


0

私のサイトにEpiserver Findを追加し、Episerver Findに対応するNuGetパッケージをインストールした後、これを取得しました。

修正は簡単でした:Episerverに関連するすべてのアドオンも更新します(それらが無関係と思われる場合でも、CMS、CMS.TinyMCE、CMS.UIなど)。

可能なすべてのEpiserverアドオンを更新して再コンパイルした後、エラーはなくなりました。


0

私のシナリオでは、dotnetCoreアプリの.csprojファイルを編集しました。TargetFrameworkタグの値がnetcoreapp2.1で、RuntimeFrameworkVersionタグの値が2.0.0であることに気付きました。したがって、RuntimeFrameworkVersion2.1.0に変更しまし、保存してVSを再起動して再構築し、エラーを解決しました。

これがあなたを助けることを願っています...

幸運を、

菅山


-1

プロジェクトで参照を見つけますSystem.Web.Mvc、バージョンを確認します。

その後、参照を右クリックします->アセンブリと検索system.web.mvcとセットアップします。

問題が原因で、これらのアセンブリの異なるバージョンが発生します

編集:NuGetパッケージの管理と更新のインストールを選択します(複数のプロジェクトがある場合は、それらにも更新をインストールします)。

重要な更新はMicrosoft.AspNet.Mvcで あり、Microsoft.Net.Compilersはそれを忘れないでください!


-1

私たちのチームでは、gitを使用してさまざまなコンピューターで作業していました。誰かが更新しましたがdll、持っていませんでした。依存関係の参照を更新し、問題を解決しました。


-3

同様の問題があり、他のDLL、つまりB.dllを参照するDLL、つまりA.dllを作成しました。

アプリケーションC.exeを作成し、DLL A.dllおよびB.dllを参照しました。

解決策-c.exeからB.dllの参照を削除すると、問題を解決できました。

お役に立てれば。

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