Microsoft.Net.Compilersの目的は何ですか?


83

このコンパイラの重要性は何ですか?それは必需品ですか、それともなしでできるのでしょうか?とにかく別のコンパイラを使用する目的は何ですか、それとも単なる未来的なプロジェクトですか?簡単な概要をいただければ幸いです。


2
これMicrosoft.CodeDom.Providers.DotNetCompilerPlatformはv1.0.8以下の依存関係でもあるため、その理由で表示される可能性があります
KyleMit 2018

1
MicrosoftよるとMicrosoft.Net.Compilersは非推奨になり、が優先されMicrosoft.Net.Compilers.Toolsetます。
Uwe Keim

回答:


96

Microsoft.Net.Compilersパッケージのポイントは、.NETFrameworkまたはVisualStudioに付属しているコンパイラではなく、そのパッケージで配布されているコンパイラがプロジェクトのコンパイルに使用されることです。最も実用的な直接的な利点は、プロジェクトでC#6機能を使用できるようになり、C#6コンパイラがインストールされていないシステム、たとえば、継続的インテグレーションサーバー上でプロジェクトを構築できることです。完全なVisualStudio2015をインストールしたい。


.csファイルをコンパイルしてilを発行するという非常に単純なことを行う必要があります。外部参照を検証する必要はありません。Microsoft.Net.Compilersで可能ですか?
バンダラ2017年

@Bandara Microsoft.Net.Compilersの有無にかかわらず、外部参照なしでC#をコンパイルすることはできません。たとえば、過負荷の解決には参照アセンブリが必要です。また、外部参照がある場合は、Microsoft.Net.Compilersを使用して技術的には可能ですが、実際にはその作業には不適切なツールです。同じコンパイラが他のパッケージですでに利用可能であり、独自のプログラムで直接呼び出すことができる場合は、外部プロセスを起動することになります。

@JaredPar(MS)からの更新された回答を参照してください。この回答は、無効になっています。最新のVS / VSCode / SDKツールセットを使用してビルドするために、ソリューションを確認し、古いパッケージを削除する必要があると思います。
トニーウォール

16

現在、Microsoft.Net.Compilersには目的がありません。これは非推奨のNuGetパッケージであり、Visual Studio16.5以降は生成されなくなります。Microsoft.Net.Compilers.Toolsetという名前の後継パッケージがあります。このパッケージは、Microsoft.Net.Compilersとほぼ同じ機能を備えていますが、.NETDesktopと.NETCoreMSBuildインスタンスの両方で機能します。

それでも、Microsoft.Net.Compilers.Toolsetは一般消費向けではありません。このパッケージは、2つの特定の用途に役立ちます。

  1. コンパイラでクラッシュするバグに遭遇した顧客のブロックを解除するための短期的な手段として機能します。このようなお客様の場合、修正をRoslynリポジトリにマージしてから、このパッケージを使用してシナリオのブロックを1時間ほど解除できます。これは、修正が関連するVisualStudioまたは.NETSDKサービスリリースに組み込まれるまでのブリッジとして機能します。その場合、お客様はソリューションからパッケージを削除し、公式にリリースされたツールセットに依存するように求められます。
  2. Roslynと.NETSDkの公式ビルドの間でバイナリを移動するメカニズムとして機能します。

このパッケージは、お客様がビルドのために一般的に長期間使用することを目的としたものではありません。一部のお客様がこれを選択することを理解していますが、そのような使用もサポートされていません。パッケージは、新しいバージョンのMSBuildまたは.NET SDKのタスク/ターゲットに依存することにより、定期的に中断を引き起こす可能性があります。

ビルドに新しいバージョンのコンパイラを使用したいお客様は、代わりにコンパイラの公式ディストリビューションの1つを使用することをお勧めします。

  1. VisualStudioビルドツールSKUを使用します。
  2. .NETSDKを使用する

:Microsoft.Net.Compilersパッケージは、依存関係であったため、数年前にMicrosoft.CodeDom.Providers.DotNetCompilerPlatformパッケージの一部として正式にサポートされていました。バージョン2.0以降、Microsoft.Net.Compilersへの依存関係は削除され、完全に独立したパッケージとして機能するようになりました。同時に、Microsoft.Net.Compilersの明示的な使用例がなくなったため、非推奨に移行しました。

これは、Microsoft.CodeDom.Providers.DotNetCompilerPlatformが依存関係を削除したときに削除されなかったため、一部の顧客がプロジェクトファイルにMicrosoft.Net.Compilersを予期せず使用していることに気付くことを意味します。そのような顧客へのアドバイスは、単にパッケージへの参照を削除することです。もう必要ありません。


非常に興味深い洞察。NuGetパッケージの説明に短期間の使用のみに関する側面が記載されていないのはなぜか疑問に思います:nuget.org/packages/Microsoft.Net.Compilers
Jack Miller

@JackMillerこれはMicrosoft.Net.Compilers.Toolsetで言及されています。`このパッケージは、主にホットフィックスを顧客に迅速に出荷する方法として意図されています。古いMSBuildインストールで新しいコンパイラを提供するための長期的なソリューションとしてそれを使用することは明示的にサポートされていません。それは定期的に壊れる可能性があります。`
Youssef136月

6

これは、オープンソースのC#およびVisualBasicコンパイラに豊富なコード分析APIを提供するパッケージです。

githubで広範なドキュメントを見つけることができます:

https://github.com/dotnet/roslyn


5
ありがとう。私は以前に公式ドキュメントに行ったことがありますが、それでもプロジェクトの目的はあいまいです。
役に立つBee 2015

2
:@usefulBeeは、基本的には、マイクロソフト、追加情報のために例えばチェックウィキペディアのオープンソース運動の結果であるen.wikipedia.org/wiki/.NET_Compiler_Platform
ViRuSTriNiTy

1

他の人が言っているように、C#およびVB.NET用の.NETコンパイラが含まれています。

これがパッケージであることの興味深い側面は、Visual Studioにまだ付属していないバージョンを含め、プロジェクト用にコンパイラーの特定のビルドを指定できることです。

これは、VisualStudioのオープンソースコンポーネントであるhttps://github.com/dotnet/project-systemで使用します。これにより、プレリリースバージョンのコンパイラを使用して、VSに付属のコンパイラでサポートされていないドッグフード言語機能を使用できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.