質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

4回答

4002閲覧

.NET Framework 3.5 にて C++/CLI のライブラリと、それを読み込む C# のプロジェクトをビルドしようとしているのですが、ビルドできません。

juner

総合スコア121

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2018/04/03 08:20

編集2018/04/04 08:37

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

別の回答のコメントにも記載しましたが、
https://blogs.msdn.microsoft.com/vcblog/2016/02/24/stuck-on-an-older-toolset-version-move-to-visual-studio-2015-without-upgrading-your-toolset/

First, in addition to installing VS 2017 you also need to install VS 2010 on the same machine with your VS 2008

vs2010のインストールがポイントのようです。
イメージ説明
もともとvs2008,2015,2017をインストールしている環境にvs2010をインストールしたらPlatform Toolsetで2008が選択できるようになりました。

投稿2018/04/04 13:12

編集2018/04/04 13:14
hmmm

総合スコア818

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

juner

2018/04/04 16:44

無事ビルドでき、動作することを確認できました。 VisualStudio 2008 だけでなく、VisualStudio 2010 も入れないとダメだったとは気が付きませんでした。 ありがとうございます。
guest

0

TestClassLibraryプロジェクトのプロジェクト (TestClassLibrary.vcxproj)ファイルをメモ帳などのテキストエディタで開いてターゲットフレームワークを書き換えてやるとどうですか?

以下、参考ページ

方法: ターゲット フレームワークおよびプラットフォームのツールセットを変更する
https://msdn.microsoft.com/ja-jp/library/ff770576.aspx

投稿2018/04/03 10:08

Masahiro-Ito

総合スコア24

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

juner

2018/04/04 08:31

ターゲットフレームワークの変更では意味が無かったです。 出力結果に変わりなく、 4.0.0.0 が含まれる dll が生成されました。 また、次の様な記事があったので色々と試してみているところです。 Visual C++ で .NET Framework を使用する際の注意点 https://clown.hatenablog.jp/entry/20130813/vc_target_framework とあり、 .Net framework 3.5 でビルドしようとしても、vs2015 や vs2017 のツールセットでは .net framework 4.0 以上のものを生成してしまう様です。 Visual Studio でネイティブ マルチターゲットを利用し、古いプロジェクトを作成する:以前の Visual Studio ツールセットをインストールします。 https://docs.microsoft.com/ja-jp/cpp/porting/use-native-multi-targeting#install-an-older-visual-studio-toolset の様に vs2008(v90) をインストールしてツールセットを追加する方法がある様です。 ※まだうまくツールセットの追加に成功していないので調査中ですが。
Masahiro-Ito

2018/04/04 09:28

そうでしたか。すみませんが、自分で試さずに投稿しました。 VS2010の時に、この方法で解決した記憶があったのですが、今のVisual Studioだとダメなのですね。
juner

2018/04/04 09:34

VS2010であれば 多分 ツールセットとして VS2008(v90) があった頃なので .net framework 3.5 のビルドもうまくできていたかもしれませんね。(未検証)
guest

0

C++/CLIではなく、DllImportを使ってC#オンリーで解決できませんか?
ご存知の上で、C++/CLIを使わざるをえない状況なのかもしれないですが。
https://tomosoft.jp/design/?p=4607

投稿2018/04/04 14:42

gaya-K

総合スコア449

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

エラーメッセージそのまんまです。
TestClassLibrary.Class1 がどこにも見当たりません。
作った覚えがありますか?

投稿2018/04/03 09:39

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

juner

2018/04/04 08:18

TestClassLibrary のプロジェクトをコンパイルすると生成されます。 ただし、.NET Framewrok 3.5 を指定しているのに、設定されているdllのバージョンを見ると 何故か TestClassLibrary.dll に設定されているdll の一部が.NET Framework 4.0 のものが含まれてしまうという問題なのです。
Zuishin

2018/04/04 09:36

本当に生成されますか? どのソースのどこで定義されています?
Zuishin

2018/04/04 09:37

Class1 のクラス定義をしているファイル名とソースの中身を質問に追記してください。
Zuishin

2018/04/04 09:56

見ましたが……
Zuishin

2018/04/04 09:57

もう一度書きます。 見当たりません。 Class1 のクラス定義をしているファイル名とソースの中身を質問に追記してください。
hmmm

2018/04/04 10:53

https://github.com/juner/testproject20180403/blob/master/TestClassLibrary/TestClassLibrary.h これですね。 .Netのバージョンを変更しないのであれば、vs2008でビルドするのがいい気がします。 たしかvs2012の時点でc++/cliは4.5でしかビルド出来なかった気がします。 junerさんが記載しているようにc++/cliのツールセットを変更できればビルドできるかもしれませんが、それは結局vs2008でビルドするのと同じです。 IDEだけ新しいのが使用できるという意味はあるかもしれませんが。。
Zuishin

2018/04/04 10:59

ありがとうございます。ヘッダの中に実装がありましたか。 私の探し方が悪かったということですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問