2010-03-17 40 views
1

我正在編寫一個webservice,調用時應構建一個C#項目。我使用框架2引用,Microsoft.Buld.Engine和Microsoft.Build.Framework。如果你看 '<導入>' 部分.csproj的文件下,默認情況下它具有:Microsoft.Build.Engine錯誤(默認目標):目標GetFrameworkPaths:找不到.NET Framework SDK

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 

,我則改爲:

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> 

我的代碼來構建的csproj是:

Engine buildEngine = new Engine(Path.Combine(Environment.GetEnvironmentVariable("SystemRoot"), @"Microsoft.NET\Framework\v2.0.50727")); 
FileLogger logger = new FileLogger(); 
logger.Parameters = @"logfile=c:\temp\build.log"; 
buildEngine.RegisterLogger(logger); 

bool success = buildEngine.BuildProjectFile([Path_Of_Directory]+ "ProjectName.csproj"); 
buildEngine.UnregisterAllLoggers(); 

成功變量返回false,因爲構建faild。然後我檢查build.log文件,這是我收到的錯誤:

構建開始3/17/2010上午11時16分56秒 項目 「[Path_Of_Directory] ​​\ ProjectName.csproj」 (默認目標):目標 GetFrameworkPaths:找不到 .NET Framework SDK。任務是 正在尋找通向.NET Framework SDK的路徑,位置 在註冊表項 HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft.NETFramework的值中指定。 通過執行以下操作之一,您可能能夠解決問題 :1.) 安裝.NET Framework SDK。 2.) 手動將上述註冊表項設置爲 正確的位置。目標

我不明白爲什麼它不會建立。任何幫助都感激不盡。由於

+0

你究竟有什麼不明白的?錯誤消息告訴你到底要檢查什麼。是你做的嗎? – TomTom 2010-03-17 09:23:34

+0

是的,註冊表值是「C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727」,這與我通過的bin路徑完全相同,因此我的困境 – 2010-03-17 09:30:15

回答

1

您可以嘗試通過建立這個項目來驗證SDK路徑:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Target Name="GetPath"> 
     <GetFrameworkSdkPath> 
      <Output 
       TaskParameter="Path" 
       PropertyName="SdkPath" /> 
     </GetFrameworkSdkPath> 
     <Message Text="$(SdkPath)"/> 
    </Target> 
</Project> 

我可能是錯的,但路徑C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727你看到似乎不正確。它應該是C:\ Program Files \ Microsoft Visual Studio 8 \ SDK \ v2.0 \或C:\ Program Files \ Microsoft SDKs \ Windows \ v6.0A。

+0

腓特烈,你讓我更接近我回答。這是正確的binpath文件夾,但.csprof文件引用了另一個項目而不是它的.dll,並且正在binpath文件夾中搜索項目,因此出現了錯誤。我刪除了對項目的引用,並在被引用的項目的bin文件夾中添加了對dll的引用,並且它可以工作。 – 2010-03-17 11:37:25

1

在進一步調查中,我發現了錯誤的真正原因。回顧一下在我創建的應用程序:

它在框架3.5試圖建立一個C#項目中創建一個Web服務使用開發框架2.

當一個人將兩個refrences,Microsoft.Buld.Engine和微軟.Build.Framework,你會注意到每個版本都有兩個版本。一個版本是框架2版本,另一個版本是框架3.5版本。由於我試圖構建的項目是在框架2中完成的,因此我導入了框架2版本。這是錯誤所在。

解決方案: BinPath應該是框架二的唯一參考,即:「C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727」。 Microsoft.Buld.Engine和Microsoft.Build.Framework應該指向3.5版本,因爲執行構建的應用程序是在框架3.5中開發的。我想,如果它是在框架2中開發的,那麼我首先就不會有任何問題。

1

你可以嘗試這樣的方式:

找到Assemply從C:\ Program Files文件\參考大會\微軟\框架\ v3.5版本\ Microsoft.Build.Engine.dll。 複製 和 過去到GAC位置如下所述:

C:\ WINDOWS \裝配\ GAC_MSIL \ Microsoft.Build.Engine \ 3.5.0.0__b03f5f7f11d50a3a

它的工作。由於GAC文件丟失問題。