2013-03-19 94 views
5

當我嘗試構建C#控制檯應用程序(可能還有其他應用程序)時,看起來TargetFrameworkDirectories設置不正確;特別是它省略了Facades目錄。MSBuild錯誤地設置TargetFrameworkDirectories

由於我一直在嘗試診斷問題一段時間,下面列出了可能相關的事實。

  • 當試圖在Visual Studio 2012中構建引用Reactive Extension庫(使用NuGet進行管理)的項目時,問題就顯現出來了。錯誤(或警告)是warning MSB3267: The primary reference "System.Runtime", which is a framework assembly, could not be resolved in the currently targeted framework. ".NETFramework,Version=v4.5"。 MSBuild的執行ResolveAssemblyReference
  • 我可以從MSBuild的命令行,這似乎更簡單
  • 其他工作站不會出現問題重現錯誤期間發生的問題。在好機器上運行msbuild並在壞機器上啓動了一些不同的日誌文件
  • 在好機器TargetFrameworkDirectoriesResolveAssemblyReference的參數)是C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Facades\,但是在壞機器上它缺少第二個條目(外牆目錄)
  • 掃描過的好和壞的MSBuild日誌文件中的以下區別露面:

    1. 目標AssignProjectConfiguration在惡劣的構建被跳過,但在好身材
    2. 一些運行目標如GetInstalledSDKLocations被跳過了良好的構建,但沒有提到壞的構建
    3. ResolveAssemblyReference任務通過AssembliesImplicit=true在良好的構建,但不是壞的構建。
    4. ResolveAssemblyReference任務在錯誤構建中傳遞任務參數TargetFrameworkDirectoriesC:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\,但良好構建Facades目錄(請參見上面)作爲第二項。

因爲這是C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets驅動I顯示差異好的和壞的機器上的文件。他們包含很多不同之處第一個區別是項目元素(第17行),在優質機器上有一個額外的屬性TreatAsLocalProperty="OutDir"。在好機器上,目標文件包含更多評論,如<!-- VS10 without SP1 and without VS11 will not have VisualStudioVersion set, so do that here -->。跳到AssignProjectConfiguration目標,好機器有Condition="'$(CurrentSolutionConfigurationContents)' != '' or '@(ProjectReference)'!=''",而壞機器有Condition="'@(ProjectReference)'!=''"(我假設解釋了爲什麼它被跳過)。

我試過的最後一件事是修復「Microsoft .NET Framework 4.5」和「Microsoft .NET Framework 4.5 Multi-Targeting Pack」。它沒有幫助。

任何意見,將不勝感激,特別是如果我可以避免重新安裝Visual Studio 2012!

更新:似乎重新安裝.NET 4.5之後「僅」修復VS2012解決了我的問題。我最好的猜測是什麼導致了這個問題,不知何故,我的Microsoft.Common.targets被更改爲舊版本。我不知道什麼可以改變目標文件。

+1

這似乎是一個.NET問題。也許只是重新安裝/修復.NET 4.5? – leppie 2013-03-19 18:17:20

+0

應該補充說我修復了.NET 4.5。我會修改帖子來指出這一點。 – banbh 2013-03-19 20:53:58

+0

在詢問[在MSBuild論壇上的相關問題](http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/e9d339fb-31cf-47d7-86c7-2bdfb77027a6)後,似乎_reinstalling_。 NET(而不僅僅是修復)解決了這個問題。 @leppie,如果您將您的評論發佈到帖子中,我會將其標記爲答案。 – banbh 2013-03-25 14:12:23

回答

0

正如@leppie建議的那樣,它是一個.NET問題。由於某種原因修復.NET似乎並沒有解決這個問題。然而,重新安裝.NET 4.5(接着修復VS2012)似乎修復了它。