前提・実現したいこと
C# で とあるC++で書かれたライブラリを使おうと思い、ラッパーライブラリの作成を行おうとしています。
VisualStudio 2017 にて .net framework 3.5 にて C# のプロジェクト TestCsharpProject と C++/CLIのプロジェクトの TestClassLibrary を作成し、 TestCsharpProjectから TestClassLibrary を使おうとしています。
簡単なサンプルとしては次の様なソリューションを作っています。(現在C#側のビルドは通りません。)
https://github.com/juner/testproject20180403
発生している問題・エラーメッセージ
実行すると次の様な警告とエラーとなります。
2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(2052,5): warning MSB3258: プライマリ参照 "C:***\testproject20180403\Debug\TestClassLibrary.dll" は、現在のターゲット フレームワークのバージョン "2.0.0.0" より高いバージョン "4.0.0.0" を持つ .NET Framework アセンブリ "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" に間接的に依存するため、解決できませんでした。 2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(2052,5): warning MSB3258: プライマリ参照 "C:***\testproject20180403\Debug\TestClassLibrary.dll" は、現在のターゲット フレームワークのバージョン "2.0.0.0" より高いバージョン "4.0.0.0" を持つ .NET Framework アセンブリ "System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" に間接的に依存するため、解決できませんでした。 2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(2052,5): warning MSB3258: プライマリ参照 "C:***\testproject20180403\Debug\TestClassLibrary.dll" は、現在のターゲット フレームワークのバージョン "2.0.0.0" より高いバージョン "4.0.0.0" を持つ .NET Framework アセンブリ "System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" に間接的に依存するため、解決できませんでした。 2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(2052,5): warning MSB3258: プライマリ参照 "C:***\testproject20180403\Debug\TestClassLibrary.dll" は、現在のターゲット フレームワークのバージョン "2.0.0.0" より高いバージョン "4.0.0.0" を持つ .NET Framework アセンブリ "System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" に間接的に依存するため、解決できませんでした。 2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(2052,5): warning MSB3258: プライマリ参照 "C:***\testproject20180403\Debug\TestClassLibrary.dll" は、現在のターゲット フレームワークのバージョン "2.0.0.0" より高いバージョン "4.0.0.0" を持つ .NET Framework アセンブリ "System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" に間接的に依存するため、解決できませんでした。 2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(2052,5): warning MSB3258: プライマリ参照 "C:***\testproject20180403\Debug\TestClassLibrary.dll" は、現在のターゲット フレームワークのバージョン "3.5.0.0" より高いバージョン "4.0.0.0" を持つ .NET Framework アセンブリ "System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" に間接的に依存するため、解決できませんでした。 2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(2052,5): warning MSB3258: プライマリ参照 "C:***\testproject20180403\Debug\TestClassLibrary.dll" は、現在のターゲット フレームワークのバージョン "2.0.0.0" より高いバージョン "4.0.0.0" を持つ .NET Framework アセンブリ "System.Data.SqlXml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" に間接的に依存するため、解決できませんでした。 2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(2052,5): warning MSB3268: プライマリ参照 "C:***\testproject20180403\Debug\TestClassLibrary.dll" は、現在ターゲットされているフレームワークで解決できなかったフレームワーク アセンブリ "System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" に間接的に依存するため、解決できませんでした。".NETFramework,Version=v3.5"。この問題を解決するには、参照 "C:***\testproject20180403\Debug\TestClassLibrary.dll" を削除するか、"System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" を含むフレームワーク バージョンにアプリケーションを再ターゲットしてください。 2>C:***\testproject20180403\TestCsharpProject\Program.cs(12,32,12,48): error CS0246: 型または名前空間の名前 'TestClassLibrary' が見つかりませんでした (using ディレクティブまたはアセンブリ参照が指定されていることを確認してください)。
試したこと
開発者コマンドプロンプトで ildasm をdllに対して実施したところ、
MANIFEST にて mscorelib や System が 2.0.0.0 と 4.0.0.0 の両方設定されていることを確認しました。
ターゲットフレームワークとして v3.5を入れても
出力結果に変わりなく、 4.0.0.0 が含まれる dll が生成されました。
また、次の様な記事があったので色々と試してみているところです。
Visual C++ で .NET Framework を使用する際の注意点
とあり、 .Net framework 3.5 でビルドしようとしても、vs2015 や vs2017 のツールセットでは .net framework 4.0 以上のものを生成してしまう様です。
Visual Studio でネイティブ マルチターゲットを利用し、古いプロジェクトを作成する:以前の Visual Studio ツールセットをインストールします。
の様に vs2008(v90) をインストールしてツールセットを追加する方法がある様です。
※まだうまくツールセットの追加に成功していないので調査中ですが。
補足情報(FW/ツールのバージョンなど)
Visual Studio Professional 2017 Version 15.6.4

回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/04 16:44