当我尝试构建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并在坏机器上启动了一些不同的日志文件
- 在好机器
TargetFrameworkDirectories
(ResolveAssemblyReference
的参数)是C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Facades\
,但是在坏机器上它缺少第二个条目(外墙目录) 扫描过的好和坏的MSBuild日志文件中的以下区别露面:
- 目标
AssignProjectConfiguration
在恶劣的构建被跳过,但在好身材 - 一些运行目标如
GetInstalledSDKLocations
被跳过了良好的构建,但没有提到坏的构建 ResolveAssemblyReference
任务通过Assemblies
与Implicit=true
在良好的构建,但不是坏的构建。ResolveAssemblyReference
任务在错误构建中传递任务参数TargetFrameworkDirectories
与C:\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被更改为旧版本。我不知道什么可以改变目标文件。
这似乎是一个.NET问题。也许只是重新安装/修复.NET 4.5? – leppie 2013-03-19 18:17:20
应该补充说我修复了.NET 4.5。我会修改帖子来指出这一点。 – banbh 2013-03-19 20:53:58
在询问[在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