🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

.NET Framework 3.5

.NET Framework-3.5は、NET Framework 2.0にアセンブリを追加(3.0も含む)したものをベースにしています。

Q&A

解決済

2回答

3512閲覧

C#7.0かつ.NETFramework3.5でのDLL生成コンパイル

rovissa2525

総合スコア10

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

.NET Framework 3.5

.NET Framework-3.5は、NET Framework 2.0にアセンブリを追加(3.0も含む)したものをベースにしています。

0グッド

0クリップ

投稿2019/12/12 03:56

C#7.0かつ.NETFramework3.5でのDLL生成コンパイル

・最終目標
C#7.0以降かつターゲットフレームワークが.NET Framework 3.5の環境下で
DLLを生成するコンパイルを行いたい。

・状況
Visual Studio 2017 Community, Visual Studio 2019 Communityなど、
VS上でのコンパイルでは、

C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(2106,5): warning MSB3258: プライマリ参照 "*****" は、現在のターゲット フレームワークのバージョン "2.0.0.0" より高いバージョン "4.0.0.0" を持つ .NET Framework アセンブリ "System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" に間接的に依存するため、解決できませんでした。

というWARNINGが発生してしまい、参照しているライブラリで定義されているものが使えなくなり、
結果コンパイルエラーになってしまいます。

参照しているライブラリのバージョンはv2.0.50727など、どれもv3.5と互換性のあるものです。 (ildasmで調査)

コマンドラインからcsc.exeを用いて直接コンパイルする方法も試しましたが、
この場合、コンパイルは通りますが生成されるDLLはv4.0.30319になってしまうため
こちらもうまくいきません。

この条件下でなければならない理由があるため、
ターゲットフレームワークバージョンを4.0以降へ
変更することなどは厳しい状態です。

なにか解決策はないでしょうか?

・ためしたこと
Visual Studio 2017 Communityでのコンパイル (結果:コンパイルエラー)

Visual Studio 2019 Communityでのコンパイル (結果:コンパイルエラー)

Visual Studio でターゲットフレームワークを.NET Framework 4.0に変更してコンパイル
(結果:コンパイル成功にはなるが、条件を満たさないため意味無し)

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Roslyn\csc.exe でのコンパイル
(結果:コンパイル成功だが、バージョンが4.0になってしまう)

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

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

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

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

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

guest

回答2

0

C#7.0以降かつターゲットフレームワークが.NET Framework 3.5の環境下で

DLLを生成するコンパイルを行いたい。

.NET Framework のバージョン対応表を見る限り、.NET Framework 3.5の環境下ではC# 4.0以降の機能はサポートされていません。

なので、

  • C# 3.0以前の機能のみで開発を進める(Tupleasync/awaitdynamicなどの構文は利用できません)
  • 「この条件下でなければならない」環境を見直す

のどちらかが対応としては適切と思います。

投稿2019/12/12 04:29

編集2019/12/12 04:31
BluOxy

総合スコア2663

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

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

rovissa2525

2019/12/12 14:00

回答ありがとうございました。なんとか自己解決ができました。 私もまだまだ始めたばかりであちこち調べて回っていたのですが、 どうやら .NET FrameworkのバージョンとC#の言語バージョンは独立しているようなので、 コードの内容によっては質問内容のような環境でのコンパイルが可能なようです。 実際、質問内容の条件を満たすコンパイルが可能でした。 参考サイト:https://ufcpp.net/study/csharp/cheatsheet/listfxlangversion/
guest

0

自己解決

Visual Studio上でのコンパイルで、System.dll、System.Core.dllなどの
標準で参照設定されているdllが.NET Framework 4.xのものを参照していることが原因でした。

Visual Studio上で編集する方法がわからなかったため、.csprojを直接書き換えて、
参照するdllもすべて.NET Framework 3.5と互換のあるものに変更を行った結果
Visual Studio 2017でのコンパイルに成功しました。

投稿2019/12/12 14:07

rovissa2525

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問