##[错误]C:\Program Files\Microsoft Visual Studio�2\Community\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(1217,5):错误 MSB3644:.NETFramework 的参考程序集,未找到版本=v4.5。要解决此问题,请安装此框架版本的开发人员包(SDK/目标包)或重新定位您的应用程序。您可以在以下位置下载 .NET Framework 开发人员包...
我的解决方案是将任何针对 .Net Framework 4.5 的项目升级到 4.7.2,然后在 Visual Studio 2019 而不是 2022、相同的 Win Server 2019 上构建
更改自
vmImage: 'windows-latest'
到
vmImage: 'windows-2019'
为我工作。它曾经工作得更早,因为 2019 年是最新的,现在最新的是 2022 年,这有问题。
将我的所有解决方案项目从各种版本的 .NET Framework 切换到现在全部定位“.NET Framework 4.8”后,我在 Visual Studio 2022 社区中也遇到了此问题。
我的错误(几乎与OP的相同):
此错误提到了文件
C:\Program Files\dotnet\sdk\6.0.101\Microsoft.Common.CurrentVersion.targets
第1217行的第5列,这导致了以下部分<GetReferenceAssemblyPaths
:
<Target
Name="GetReferenceAssemblyPaths"
DependsOnTargets="$(GetReferenceAssemblyPathsDependsOn);GetFrameworkPaths">
...
<!-- By default if there is no root path set then the task will assume it is Program Files\Reference Assemblies\Microsoft\Framework-->
<GetReferenceAssemblyPaths
Condition="'$(TargetFrameworkMoniker)' != '' and ('$(_TargetFrameworkDirectories)' == '' or '$(_FullFrameworkReferenceAssemblyPaths)' == '')"
TargetFrameworkMoniker="$(TargetFrameworkMoniker)"
RootPath="$(TargetFrameworkRootPath)"
TargetFrameworkFallbackSearchPaths="$(TargetFrameworkFallbackSearchPaths)"
BypassFrameworkInstallChecks="$(BypassFrameworkInstallChecks)"
>
<Output TaskParameter="ReferenceAssemblyPaths" PropertyName="_TargetFrameworkDirectories"/>
<Output TaskParameter="FullFrameworkReferenceAssemblyPaths" PropertyName="_FullFrameworkReferenceAssemblyPaths"/>
<Output TaskParameter="TargetFrameworkMonikerDisplayName" PropertyName="TargetFrameworkMonikerDisplayName" Condition="'$(TargetFrameworkMonikerDisplayName)' == ''"/>
</GetReferenceAssemblyPaths>
...
</Target>
我知道像
$(TargetFrameworkMoniker)
这样的部分是变量。为了确定这些评估结果,我进入 Visual Studio,打开 csproj 文件,转到“构建事件 > 预构建事件命令行”并输入 echo "TargetFrameworkMoniker" = "$(TargetFrameworkMoniker)"
。然后我保存并构建项目,忽略错误,转至窗口“Output”查看这些变量的计算结果。我对每个变量都这样做。下面是与上面相同的代码,但变量现在是它们实际评估的值(对我来说):
<Target
Name="GetReferenceAssemblyPaths"
DependsOnTargets="$(GetReferenceAssemblyPathsDependsOn);GetFrameworkPaths">
...
<!-- By default if there is no root path set then the task will assume it is Program Files\Reference Assemblies\Microsoft\Framework-->
<GetReferenceAssemblyPaths
Condition="'.NETFramework,Version=v4.8' != '' and ('' == '' or '' == '')"
TargetFrameworkMoniker=".NETFramework,Version=v4.8"
RootPath=""
TargetFrameworkFallbackSearchPaths=""
BypassFrameworkInstallChecks=""
>
<Output TaskParameter="ReferenceAssemblyPaths" PropertyName="_TargetFrameworkDirectories"/>
<Output TaskParameter="FullFrameworkReferenceAssemblyPaths" PropertyName="_FullFrameworkReferenceAssemblyPaths"/>
<Output TaskParameter="TargetFrameworkMonikerDisplayName" PropertyName="TargetFrameworkMonikerDisplayName" Condition="'' == ''"/>
</GetReferenceAssemblyPaths>
...
</Target>
除了“.NET Framework 4.8”之外,我没有看到任何其他建议,所以我现在不确定如何继续。
我通过从 Visual Studio 2022 降级到 Visual Studio 2014 解决了这个问题。我卸载了 Visual Studio 2022 并安装了 Visual Studio 2014,其余的就完成了。我的安装现已启动并运行。
我的解决方案是使用 VSBuild@1 task 并使用旧版本的 Visual Studio,我使用的是 Visual Studio 2013,但我不确定它是否是唯一有效的解决方案。我还使用 windows-2019 设置了 vmImage 池。