我有一堆使用我們編寫的自定義構建應用程序編譯的遺留Web項目。這是因爲依賴性很複雜,代碼...不是最優的。從好的一面來說,它最近已升級到.NET 4.5,我們正在使用Visual Studio 2013.代碼合同和以編程方式編譯項目
我最近開始在其他項目中使用代碼合同,並且非常喜歡它提供的SoC。我想在舊代碼中實現這一點,我們正在維護新功能(不需要完全重寫)。在開發過程中,只要我在VS中進行編譯並將編譯後的DLL文件複製到Web應用程序的BIN文件夾(aps.net 32bit latest IIS)中,就可以開始工作。
我想在我們的發佈版本中包含合同,以及使用我們的構建工具。否則,我將不得不使用該工具,然後使用VS創建一個發佈,這是一個兩步過程。我有完整的源代碼管理工具(在我的DEV PC上本地執行),但是我無法通過代碼合同獲得輸出。我閱讀了代碼合同文檔,他們提到構建腳本Microsoft.CodeContracts.targets,我試圖將它添加到構建代碼中,但沒有成功。無可否認,我對構建過程,構建腳本等方面的知識缺乏。任何幫助/指示如何讓這個工作將不勝感激。我仍然希望通常在VS中編譯我的代碼,並且使用合同工作以及使用構建工具和合同工作。
(我沒有手動更改任何的csproj文件)
構建代碼: 生成代碼使用Microsoft.Build和Microsoft.Build.Framework組件來完成。
var pc = new ProjectCollection();
var buildLogger = new FileLogger();
var logFilePath = @"MyLog.log";
buildLogger.Parameters = string.Format("logfile={0}", logFilePath);
var binDirectory = Path.Combine(outputWebDir, "Bin");
var globalProperty = new Dictionary<string, string>();
globalProperty.Add("OutputPath", binDirectory);
globalProperty.Add("Configuration", publishParams.ReleaseMode);
globalProperty.Add("Platform", publishParams.PlatformMode);
if (projectFileToPublish.IndexOf("SOTAQ.WebPoint.Web.csproj", StringComparison.OrdinalIgnoreCase) < 0)
globalProperty.Add("SolutionDir", publishParams.SparcoSolutionPath);
if (isWebSite)
{
globalProperty.Add("WebProjectOutputDir", outputWebDir);
globalProperty.Add("DeployOnBuild", "True");
}
globalProperty.Add("CodeContractsInstallDir", @"C:\Program Files (x86)\Microsoft\Contracts\");
globalProperty.Add("CodeContractRewriteCommand", @"C:\Program Files (x86)\Microsoft\Contracts\Bin\ccrewrite.exe");
globalProperty.Add("CodeContractAnalysisTargets", @"C:\Program Files (x86)\Microsoft\Contracts\MsBuild\v4.0\Microsoft.CodeContractAnalysis.targets");
globalProperty.Add("CodeContractsCCDocgenCommand", @"C:\Program Files (x86)\Microsoft\Contracts\Bin\ccdocgen.exe");
globalProperty.Add("CodeContractsCCRefgenCommand", @"C:\Program Files (x86)\Microsoft\Contracts\Bin\ccrefgen.exe");
string[] targets;
if (isWebSite)
targets= new[] { "Build", "ResolveReferences", "_CopyWebApplication" };
else
targets = new[] { "Build", "ResolveReferences" };
var buildRequestData = new BuildRequestData(projectFileToPublish, globalProperty, null, targets, null);
var buildParams = new BuildParameters(pc);
buildParams.Loggers = new[] {buildLogger};
BuildResult buildResult = BuildManager.DefaultBuildManager.Build(buildParams, buildRequestData);
任何幫助非常感謝! 由於提前, -Igor