プリコンパイルを有効にしてASP.Net Webアプリケーション(WebフォームとMVC)をコンパイルする必要があります。 Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspaceを使用してプロジェクトを開き、プロジェクトレベルのアセンブリを生成します。私はRazorGeneratorを使用して事前コンパイルすることができますが、これは私のソリューションにさらに複雑さを加えることになります。単にRoslyn Workspaceを使用する方法がありますか?Roslyn Workspaceでプロジェクトをプレコンパイルする方法
1
A
答えて
0
プリコンパイルされたビルドを生成するために、次のコードを用意しましたが、多くのファイルレベルの操作を行うことなく、より堅牢な方法を探しています。
static void Main(string[] args)
{
//MVC APP
string projectFileName = @"C:\MVCWebApplication\MVCWebApplication\MVCWebApplication.csproj";
string appName = "MVCWebApplication";
//ASP.NET Web Forma App
//string projectFileName = @"C:\AapApp\WebGoat\WebGoat.NET.csproj";
//string appName = "WebGoat.NET";
//Build Artifacts will be drop to this location
string publishDrop = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
//aspnet compiler will drop precompiled artifacts to this location
string precompiledDrop = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
//Publishing the extension without precompile
var pc = new ProjectCollection();
var globalProperty = new Dictionary<string, string>();
globalProperty.Add("Configuration", "Debug");
globalProperty.Add("Platform", "x86");
globalProperty.Add("OutputPath", publishDrop);
globalProperty.Add("WebPublishMethod", "FileSystem");
globalProperty.Add("EnableUpdateable", "false");
globalProperty.Add("DebugSymbols", "true");
globalProperty.Add("VisualStudioVersion", "14.0");//TODO: Get from IDE
var buidlRequest = new BuildRequestData(projectFileName, globalProperty, null, new string[] { "Build" }, null);
var buildResult = BuildManager.DefaultBuildManager.Build(new BuildParameters(pc), buidlRequest);
//If build errors; then trow
if (buildResult.Exception != null)
{
throw buildResult.Exception;
}
//Rslyn folder not getting created in required location in VS 2015 MVC app template
//https://stackoverflow.com/questions/32780315/could-not-find-a-part-of-the-path-bin-roslyn-csc-exe
//Moving it to proper location manually
string publish = Path.Combine(publishDrop, "_PublishedWebsites", appName);
if (!Directory.Exists(Path.Combine(publish, "bin", "Roslyn")) &&
Directory.Exists(Path.Combine(publishDrop, "Roslyn")))
{
Directory.Move(Path.Combine(publishDrop, "Roslyn"), Path.Combine(publish, "bin", "Roslyn"));
}
//Executing aspnet compiler to get the final output
using (var cmd = new Process())
{
cmd.StartInfo.FileName = @"C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe";
cmd.StartInfo.Arguments = @"-v/-p " + publishDrop + @"\_PublishedWebsites\" + appName + " " + precompiledDrop;
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.UseShellExecute = false;
cmd.Start();
cmd.StandardInput.Flush();
cmd.StandardInput.Close();
cmd.WaitForExit();
Console.WriteLine(cmd.StandardOutput.ReadToEnd());
//TODO: Check result for any precompilation errors,
}
//Cleanup files in final precopiled artifact drop
if (Directory.Exists(Path.Combine(precompiledDrop, "bin", "Roslyn")))
{
Directory.Delete(Path.Combine(precompiledDrop, "bin", "Roslyn"), true);
}
Console.ReadKey();
}
+0
このコードは正常に動作し、期待される出力を出力しますが、これを行うにはもっと堅牢な方法がありますか? – Bandara
関連する問題
- 1. Project Workspaceでプロジェクトの問題をプログラムで作成する方法
- 2. roslynでFormatter.Format(SyntaxNode、Workspace)を使用するには?
- 3. ロードされたアセンブリをC#のRoslyn Workspaceにフィードするには
- 4. GitプロジェクトをEclipse Workspaceにインポートする
- 5. roslynプロジェクトの設定
- 6. Roslynワークスペースで既存のプロジェクトをコピーする方法はありますか?
- 7. QtクイックコントロールでQMLファイルをプレコンパイル
- 8. プロジェクトにDnxWorkspaceを追加する、Roslyn
- 9. プレコンパイルのステップでビジュアルスタジオプロジェクトにファイルを自動的に追加する方法は?
- 10. Angular2、フィーチャモジュールをプレコンパイルする際のメタデータエラー
- 11. Roslyn MSBuildWorkspaceを使用してC#プロジェクトの 'obj'ディレクトリを見つける方法は?
- 12. Roslynスクリプト提出を他のRoslynコンパイルのアセンブリとして使用する方法
- 13. NetBeans Workspaceの移動方法は?
- 14. "Workspace project"リポジトリを使用する方法はありますか?
- 15. RoslynのAdhocWorkspaceを使用してプロジェクトとドキュメントでソリューションを永続化する方法はありますか?
- 16. Eclipse:カスタムファイルをWorkspaceの.metadataフォルダに保存する方法は?
- 17. Eclipse rebuild workspaceを停止する方法は?
- 18. Eclipse WorkspaceのロケーションURIを取得する方法
- 19. TFS PowerShell Snapin:Team Foundation Workspaceのバージョンを読み取る方法
- 20. Roslyn 2.0でMethodGroupのシンボルを見つける方法
- 21. SyntaxNode(Roslyn C#)の交換方法
- 22. Roslyn Syntax Visualizer Extensionの操作方法は?
- 23. BazelでWORKSPACEルートを取得する
- 24. Roslyn - クラスの空白を確実にフォーマットする方法
- 25. roslyn C#文書の上に「#define VAR」を追加する方法
- 26. FieldDeclarationSyntaxノードからRoslyn FieldSymbolを取得する方法は?
- 27. RoslynのCodeRushを無効にする方法
- 28. Roslynでモジュールにコンパイル
- 29. Roslynで補完する方法の引数を取得するには?
- 30. プレコンパイル済みの公開ASP.net-MVC VS2010
MSBuildWorkspaceはRoslyn Workspaceです。私は、RazorGeneratorがあなたのプロジェクトにあるものに追加のソースコードを生成していると思うので、MSBuildWorkspaceからのコンパイルを実行することはほとんどできません。 –
@MattWarren:はいMatt Warren、MSBuildを使用してWebアプリケーションをフォルダに公開し、aspnet_comiler.exeを使用して、公開された成果物をプリコンパイルする必要がありました(私の答えを参照してください)。このメソッドは、必要なバイナリを生成しますが、私はMSBuildとaspnet_compiler.exeを避けるために、より堅牢なコードを探しています。 – Bandara