4

最近VS2008を新しいマシンにインストールしましたが、古いマシンでビルドされたDLLとリンクせず、エラーLNK2001:未解決の外部シンボル__forceCRTManifestCURが発生します。これはSide-By-Sideの問題に関係していると思います。

少し調べてみたところ、問題は、古いVS2008インストールがバージョン9.0.30729.4462 QFEにアップグレードされているのに対し、新しいVS2008インストールは9.0.21022.8RTMにアップグレードされていることだと思います。

さらに調査したところ、VS2008を新しいバージョンにアップグレードするには、SQLServer2008を少なくともSP1にインストールする必要があることがわかりました。新しいマシンにSQLServer2008をインストールしましたが、現在はSR3ですが、VS2008はバージョン9.0.21022.8のままです。インストールしたSQLServerはSR2までサービスパック済みであり、これが問題である可能性があります。

Windows(Microsoft)Updateは、SQLServer2008またはVisualStudio2008のいずれについても保留中の更新を表示しません。

VisualStudioを強制的に9.0.30729.4462QFEバージョンにアップグレードする方法を提案できますか?

または、プリコンパイルされたすべてのDLLの再コンパイルを伴わない、この問題に対する他の解決策はありますか?

4

3 に答える 3

2

後世のための遅い返事、私は知っています、しかし私は2台のマシンへのVS2008のインストールの間に同様の不一致がありました。1つはバージョン「9.0.30729.1SP」を報告し、もう1つは「9.0.30729.4462QFE」を報告しました。私はそれらが同じであることを望みました、そして最初のものがすでにサービスパックをインストールしていたことを知っていました。

この投稿は、最初にSQL 2008 R2をインストールするように私を刺激し、これが鍵であることが判明しました。これに続いて、両方のVSバージョンは「.4462QFE」でした。

于 2015-05-11T11:35:21.997 に答える
1

それでもVS2008はバージョン9.0.21022.8のままです

そうではありません。ホットフィックス/サービスパック/セキュリティパッチをインストールしたときに、#includesおよびCRTライブラリが実際に9.0.30729.4462にアップグレードされました。

vc / include / crtassem.hを開いて、マクロスープを確認します。重要なのは、コードをコンパイルするときに有効になる_BIND_TO_CURRENT_CRT_VERSIONマクロ値です。0に設定すると、CRTの元のRTMバージョン(9.0.21022.8)への依存関係を宣言します。背中の後ろで指を交差させた状態で、MicrosoftはCRTに変更を加えなかったため、新しいCRTバージョンにリダイレクトする発行者ポリシーがインストールされているマシンで実行するとコードが破損します。

1に設定すると、コードを実際にテストしたCRTのバージョン、つまり開発マシンにインストールされているバージョンへの依存関係を宣言します。これはもっと正気なことです。Microsoftは、CRTへのサービスパッチが何も壊れないようにするためにいくつかの問題を経験しましたが、これが起こったという事例は聞いたことがありません。

リンカの警告が不器用に伝えようとしているのは、_BIND_TO_CURRENT_CRT_VERSIONを0に設定してコンパイルされたコードを、1に設定してコンパイルされたコードにリンクしようとしているということです。両方の方法はありません。

コンパイラ設定を修正します。リンクするすべてのコードで同じである必要があります。

于 2012-06-26T10:52:07.220 に答える
1

おっと-私はマイクロソフトに完全に惑わされていたようです。

バージョンを9.0.21022から9.0.30729に更新するのはVisualStudioServicePack1であることがわかりました。

私はすでにSP1がインストールされていると確信していました。理由は次のとおりです。

a)[バージョン情報]ダイアログでSP1が明示的に示されています(ただし、これはVisual Studio2008SP1ではなく.Net3.5SP1であることが判明しました)

b)Windows Updateはダウンロード用のSP1を提供していませんでした。また、[更新の確認]リンクはすべて、WindowsUpdateの使用を指示するページに移動します。

最初の質問に続いて、VS2008用のC ++ Feature Packをインストールすることでソースベースを構築することができましたが、サイドバイサイドエラーのために何も実行されませんでした。結局、SP1がインストールされていなかったのではないかと思いました。

于 2012-06-26T14:46:50.077 に答える