タグ付けされた質問 「roslyn」

Roslyn(別名.NETコンパイラプラットフォーム)は、オープンソースのC#コンパイラとVisual Basicコンパイラに豊富なコード分析APIを提供します。Visual Studioで使用されるのと同じAPIを使用してコード分析ツールを構築できます。

30
パスの一部が見つかりませんでした…bin \ roslyn \ csc.exe
TFSソース管理から取得したAsp.net MVCプロジェクトを実行しようとしています。すべてのアセンブリ参照を追加したので、エラーや警告なしで正常にビルドおよびコンパイルできます。 しかし、ブラウザに次のエラーが表示されます。 パス「C:\ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe」の一部が見つかりませんでした。 エラーページの完全なスクリーンショットは次のとおりです。 数日の調査の結果、Roslynは高度なコンパイル機能を提供する.Netコンパイラプラットフォームであることがわかりました。ただし、Roslynに関連するものを何も構成していないか、プロジェクトでRoslynを使用する予定がないため、ビルドが\ bin \ roslyn \ csc.exeを検索しようとしている理由がわかりません。
813 c#  asp.net  .net  asp.net-mvc  roslyn 

5
C#インタラクティブウィンドウはコードと対話できますか?
Visual Studio 2015以降では、「C#インタラクティブウィンドウ」を開いてコードを実行できます。 > 5 + 3 8 それはかわいいです。次に、コードを操作するにはどうすればよいですか—クラス プロジェクトを開いていると仮定します。 > new Cog() (1,5): error CS0246: The type or namespace name 'Cog' could not be found (are you missing a using directive or an assembly reference?)
160 c#  .net  visual-studio  roslyn 

3
C#コンパイラはどの言語で書かれていますか?
私は、ソースコードを見てhttp://referencesource.microsoft.com/、すべてのソースコードは、C#である表示されます。 新しいC#コンパイラプラットフォーム(Roslyn)のソースコードも確認しましたが、これもC#に含まれています。そんなことがあるものか?C#言語コンパイラはC#で記述されていますか?それとも私は明白な何かを見逃していますか?C#コンパイラがC#で記述されている場合、どのように機能しますか?

5
VS2015ビルドがDynamicでエラーメッセージなしで失敗する
JSONを返すコードの単体テストを書いていました。それが返す型は匿名型であるためdynamic、アサーションを行うためにオブジェクトをa にキャストするだけで、その値を検証することを考えました。 しかし、それを行うとビルドが失敗しますが、エラーメッセージは表示されません。これを非常に単純なコードで新しい単体テストプロジェクトで再現できました。 [TestMethod] public void TestMethod1() { var obj = new { someValue = true }; dynamic asDynamic = obj; Assert.IsTrue(asDynamic.someValue); } 失敗したビルドのスクリーンショットについては、以下を参照してください ただし、アサーションをコメント化すると、ビルドは成功します。 対照的に、LinqPad 5ベータ(Roslynコンパイラを使用)で次のコードを実行しましたが、問題はありませんでした。 var obj = new { someValue = true }; dynamic asDynamic = obj; Console.WriteLine((asDynamic.someValue == true).ToString()); 本当 何が起きてる?エラーは、私は私が使用している場合は言うことができない表示されていないのでdynamic、それがために使用するための過負荷を見つけることができない場合は、誤って、またはIsTrue()ためのdynamic、またはこれがコンパイラのバグかどうか(ただし、これは非常に疑わしいですが) 、コードに問題があるという証拠はありません)。 過負荷の問題については、試してみましたAssert.IsTrue((bool)asDynamic.someValue);が、ビルドはまだ失敗し、エラーメッセージは表示されません。 @RonBeyerのコメントに従って、私は以下のようなより多くのキャストを試みましたが、役に立たなかった: dynamic asDynamic …

7
C#6.0の機能がVisual Studio 2015で機能しない
Visual Studio 2015をC#6.0でテストしていますが、言語機能が動作していません。MVC Webアプリケーションでは、次のコードがコンパイルされます。 if (!string.IsNullOrWhiteSpace(Model.Profile?.TypeName)) { // More logic here... } しかし、DebugおよびIIS Expressを介してアプリケーションを実行すると、次のエラーが発生します。 CS1525:無効な式用語 '。' これらの機能を有効にするにはどうすればよいですか?

1
Roslyn SyntaxNodesは再利用されますか?
私はRoslyn CTPを調査してきましたが、これはExpression Tree APIと同様の問題を解決しますが、どちらも不変ですが、Roslynはまったく異なる方法でそうします。 Expressionノードは親ノードへの参照がなく、を使用して変更ExpressionVisitorされます。そのため、大きなパーツを再利用できます。 SyntaxNode反対側のRoslyn は親への参照を持っているため、すべてのノードは事実上、再利用できないブロックになります。、などのメソッドはUpdate、ReplaceNode変更を加えるために提供されています。 これはどこで終わりますか?Document?Project?ISolution?APIは、ボタンの代わりにツリーの段階的な変更を促進しますが、各ステップは完全なコピーを作成しますか? なぜ彼らはそのような選択をしたのですか?私が見逃している興味深いトリックはありますか?


4
Microsoft Roslyn対CodeDom
新しいMicrosoft Roslynに関するInfoWorldの昨日のプレスリリースから: この種の「分解された」コンパイラーの最も明白な利点は、.Netアプリケーション内からコンパイル/実行プロセス全体を呼び出すことができることです。Hejlsbergは、いくつかのコードスニペットを文字列としてC#コンパイラに渡すC#プログラムを示しました。コンパイラーは、結果のILアセンブリコードをオブジェクトとして返し、それを実行のために共通言語ランタイム(CLR)に渡しました。ほら!Roslynを使用すると、C#は動的言語の機能を獲得し、実行時にコードを生成して呼び出すことができます。 私はこれを、.NET 4のリリース以来、CSharpCodeProvider.CompileAssemblyFromSource実際にそれを行うASP.Netプロジェクトで実際に使用するようになりました。これにより、ユーザーはコードをテキストボックスに入力して、アセンブリ/名前空間を選択できます。参照し、そのコードからの出力をオンザフライで実行および表示して、Windows Azureでのライブ環境コードテストを行います。 あるCodeDomの/ Roslynのにprecurser一部?ロザリンの特別な利点は何CodeDomですか?
110 .net  codedom  roslyn 

3
msbuildをC#6にアップグレードする方法
プロジェクトでC#6を使用したい(null伝播、その他の機能)。 私は自分のPCにVS 2015をインストールしました。それは見事に機能し、次のようなテストコードをビルドします。 var user = new SingleUserModel(); //all model fields are null var test = user.User?.Avatar?["blah"]; しかし、プロジェクトをリポジトリにプッシュし、CIがそれをビルドし始めると、サポートされていないためビルドが失敗します?。 CIサーバーにもVS2015をインストールしましたが、使用していないようです。私に何ができる? CI-CruiseControl .NETビルド C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe

5
RoslynでのSystem.Dynamicの使用
昨日リリースされた新しいバージョンのRoslynに付属の例を動的およびExpandoObjectを使用するように変更しましたが、修正方法がわからないコンパイラエラーが発生します。エラーは: (7,21):エラーCS0656:コンパイラーに必要なメンバー 'Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create'がありません 新しいコンパイラでダイナミクスをまだ使用できませんか?どうすれば修正できますか?これが私が更新した例です: [TestMethod] public void EndToEndCompileAndRun() { var text = @"using System.Dynamic; public class Calculator { public static object Evaluate() { dynamic x = new ExpandoObject(); x.Result = 42; return x.Result; } }"; var tree = SyntaxFactory.ParseSyntaxTree(text); var compilation = CSharpCompilation.Create( "calc.dll", options: new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary), syntaxTrees: new[] {tree}, …
96 c#  roslyn 

4
Roslynはコードのコンパイルに失敗しました
プロジェクトをVS2013からVS2015に移行した後、プロジェクトはビルドされなくなりました。次のLINQステートメントでコンパイルエラーが発生します。 static void Main(string[] args) { decimal a, b; IEnumerable<dynamic> array = new string[] { "10", "20", "30" }; var result = (from v in array where decimal.TryParse(v, out a) && decimal.TryParse("15", out b) && a <= b // Error here orderby decimal.Parse(v) select v).ToArray(); } コンパイラはエラーを返します: エラーCS0165未割り当てのローカル変数 'b'の使用 この問題の原因は何ですか?コンパイラの設定で修正できますか?
95 c#  .net  linq  roslyn 

6
ロザリンなしでウェブサイトを公開する
Visual Studio 2015と.NET 4.5.1を使用してWebアプリケーションを作成しようとしています。Webサイトを公開すると、という名前のVisual Studioフォルダーが作成されますroslyn。 オンザフライでコードをコンパイルするために使用されることは知っていますが、残念ながら、私のホスティングプロバイダーでは、サーバー上でコンパイラーを実行できません。 roslyn以前のバージョンのVisual Studioを使わずにWebサイトを公開するにはどうすればよいですか? 編集:私のウェブサイトにアクセスしようとすると、このエラーが発生しました。 IISが実行を試みているようですroslyn\csc.exeが、私のユーザーアカウントにはそれを実行する権限がありません。以前のバージョンのVisual Studioでは、このエラーは表示されません。

2
Roslynに非同期ステートマシンクラス(構造体ではない)があるのはなぜですか?
この非常に単純な非同期メソッドについて考えてみましょう。 static async Task myMethodAsync() { await Task.Delay(500); } これをVS2013(Roslyn以前のコンパイラ)でコンパイルすると、生成されたステートマシンは構造体になります。 private struct <myMethodAsync>d__0 : IAsyncStateMachine { ... void IAsyncStateMachine.MoveNext() { ... } } VS2015(Roslyn)でコンパイルすると、生成されるコードは次のようになります。 private sealed class <myMethodAsync>d__1 : IAsyncStateMachine { ... void IAsyncStateMachine.MoveNext() { ... } } ご覧のとおり、Roslynはクラスを生成します(構造体ではありません)。古いコンパイラ(CTP2012だと思います)でのasync / awaitサポートの最初の実装もクラスを生成し、パフォーマンス上の理由から構造体に変更されたことを正しく覚えていれば。(場合によっては、ボクシングとヒープの割り当てを完全に回避できます…)(これを参照) Roslynでこれが再び変更された理由を誰かが知っていますか?(これに関しては問題ありません。この変更は透過的であり、コードの動作を変更しないことを知っています。興味があります) 編集: @Damien_The_Unbeliever(およびソースコード:))imhoからの回答がすべてを説明しています。説明されているRoslynの動作は、デバッグビルドにのみ適用されます(コメントに記載されているCLRの制限のために必要です)。リリースでは、構造体も生成します(そのすべての利点があります)。したがって、これは編集と続行の両方をサポートし、本番環境でのパフォーマンスを向上させるための非常に賢いソリューションのようです。興味深いもの、参加してくれたすべての人に感謝します!

3
未チェックのuintのC#オーバーフロー動作
私はこのコードをhttps://dotnetfiddle.net/でテストしています: using System; public class Program { const float scale = 64 * 1024; public static void Main() { Console.WriteLine(unchecked((uint)(ulong)(1.2 * scale * scale + 1.5 * scale))); Console.WriteLine(unchecked((uint)(ulong)(scale* scale + 7))); } } .NET 4.7.2でコンパイルすると、 859091763 7 しかし、Roslynまたは.NET Coreを実行すると、 859091763 0 なぜこれが起こるのですか?
10 c#  .net  overflow  roslyn  uint 

2
null参照が可能ではないように思われるときに、なぜ参照解除null参照の警告が表示されるのですか?
HNQでこの質問を読んだ後、C#8のNullable参照型について読み、いくつかの実験を行いました。 誰かが「コンパイラのバグを見つけた!」と言ったとき、私は10回のうち9回、またはもっと頻繁にそれを知っています。これは実際には仕様によるものであり、彼ら自身の誤解です。そして、私がこの機能を調べ始めたのは今日だけなので、明らかに私はそれをあまりよく理解していません。これが邪魔にならないように、このコードを見てみましょう: #nullable enable class Program { static void Main() { var s = ""; var b = s == null; // If you comment this line out, the warning on the line below disappears var i = s.Length; // warning CS8602: Dereference of a possibly null reference } } …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.