6

ClickOnce 経由でデプロイされた .NET 4.5.2 アプリケーションがあります。これは、Visual Studio 2012 用の Visual C++ Redistributable を必要とするMagick.NETライブラリを使用します。2013 パッケージで試しましたが、動作するには 2012 バージョンが必要です。残念ながら、Visual Studio 2013 で可能な前提条件の下にリストされている唯一のバージョンは、2013 バージョンです。他のバージョンはどこにも見つかりません:

Visual Studio 2013 ClickOnce 前提条件ウィンドウ

Visual Studio 2013の ClickOnce アプリにVisual C++ 2012ランタイム ライブラリを含めるにはどうすればよいですか?

編集: Visual Studio の別のバージョンについて、ほとんど注目されていない非常によく似た質問があるようです。

4

1 に答える 1

7

これは、プロジェクト ファイルをハッキングしていくつかのファイルをコピーすることで実現できます。The example below is for using the Visual C++ 2012 Runtime libraries in Visual Studio 2013. 別のバージョンの Visual Studio を使用している場合、または別のバージョンの Visual C++ ランタイム ライブラリが必要な場合は、いくつかのバージョン番号を変更する必要があります。

まず、プロジェクト ファイルに次を追加します。

<ItemGroup>
  <BootstrapperPackage Include="Microsoft.Visual.C++.11.0.x64">
    <Visible>False</Visible>
    <ProductName>Visual C++ 2012 Runtime Libraries %28x64%29</ProductName>
    <Install>true</Install>
  </BootstrapperPackage>
</ItemGroup>

上記の例は、Visual C++ 2012 ランタイム ライブラリの 64 ビット バージョン用です。32 ビット バージョンを使用する場合は、x64 を x86 に置き換える必要があります。また、別のバージョンの C++ ライブラリを使用する場合は、11.0 のバージョン番号を変更する必要があります。この時点でプロジェクトを開いて前提条件に進むと、Visual Studio 2013 が Visual C++ ランタイム ライブラリを見つけられないという警告が表示されます。これを修正するには、いくつかのファイルをコピーする必要があります。

  1. C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\Bootstrapper\Packagesフォルダーに移動します。別のバージョンの C++ ランタイム ライブラリが必要な場合は、v8.0a のバージョン番号を変更する必要があります。
  2. フォルダーvcredist_x86を、Visual Studio 2013 が使用するフォルダーC:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\Bootstrapper\Packagesにコピーします。2013 ライブラリを上書きしないように、必ず別の名前を使用してください。vcredist_x64.2012を使用しました。

この時点で、ソリューションを開いてソリューションを公開できます。ユーザーがアプリケーションをインストールすると、C++ ランタイム ライブラリもインストールするよう求められます。ユーザーがアプリケーションを既にインストールしている場合は、再インストールする必要があります。それ以外の場合は、C++ ランタイム ライブラリをインストールするように求められません。

システムにC:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\Bootstrapper\Packagesフォルダーがない可能性があります。Visual Studio 2013 以外に Visual Studio 2012 をインストールした場合にのみ、このフォルダーを取得できると思います。Visual Studio 2012 をインストールせずにファイルをダウンロードできる場所がわかっている場合は、この質問を自由に編集してください。

于 2015-05-01T07:38:55.983 に答える