2013-03-19 85 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)似乎修复了它。