当我尝试构建C#控制台应用程序(可能还有其他应用程序)时,似乎TargetFrameworkDirectories
设置不正确;特别是它省略了Facades目录。
由于我一直试图诊断问题一段时间,这里列出了可能相关的事实。
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
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\
但是在坏机器上它没有第二个条目(Facades目录)扫描好的和坏的msbuild日志文件,出现以下差异:
AssignProjectConfiguration
,但在良好构建中运行GetInstalledSDKLocations
,但在错误构建中未提及ResolveAssemblyReference
任务在良好版本中传递Assemblies
,Implicit=true
,但不在错误版本中传递。{/ li>
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
驱动的,因此我将该文件分散在好的和坏的机器上。它们包含许多差异。第一个区别是项目元素(第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被改为旧版本。我不知道什么可以改变目标文件。
答案 0 :(得分:0)
正如@leppie所建议的,这是一个.NET问题。由于某些原因,修复.NET似乎没有解决问题。然而,重新安装.NET 4.5(然后修复VS2012)似乎确实解决了这个问题。