6

当我尝试构建 C# 控制台应用程序(可能还有其他应用程序)时,它似乎TargetFrameworkDirectories设置不正确;特别是它省略了 Facades 目录。

由于我一直在尝试诊断问题一段时间,因此这里列出了可能相关的事实。

  • 当尝试在 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\,但在一台坏机器上它缺少第二个条目(Facades 目录)
  • 扫描好的和坏的 msbuild 日志文件会发现以下差异:

    1. 目标AssignProjectConfiguration在错误构建中被跳过,但在良好构建中运行
    2. 好构建中跳过了许多目标GetInstalledSDKLocations,但坏构建中没有提到
    3. 任务在良好构建ResolveAssemblyReference中传递,但在不良构建中不传递。AssembliesImplicit=true
    4. 任务在bad buildResolveAssemblyReference中传递了 task 参数TargetFrameworkDirectoriesC:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\但 good build 将 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 以某种方式更改为旧版本。我不知道是什么改变了目标文件。

4

1 回答 1

0

正如@leppie 所建议的,这是一个.NET 问题。出于某种原因,修复 .NET 似乎无法解决问题。然而,重新安装 .NET 4.5(随后修复 VS2012)似乎可以修复它。

于 2013-03-25T14:21:51.980 回答