如何解决尝试在 Windows Server 2019 上的 Visual Studio 2022 上构建 Azure DevOps 代码时显示的以下错误

问题描述 投票:0回答:5

##[错误]C:\Program Files\Microsoft Visual Studio�2\Community\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(1217,5):错误 MSB3644:.NETFramework 的参考程序集,未找到版本=v4.5。要解决此问题,请安装此框架版本的开发人员包(SDK/目标包)或重新定位您的应用程序。您可以在以下位置下载 .NET Framework 开发人员包...

azure-devops msbuild .net-framework-version windows-server-2019 visual-studio-2022
5个回答
1
投票

我的解决方案是将任何针对 .Net Framework 4.5 的项目升级到 4.7.2,然后在 Visual Studio 2019 而不是 2022、相同的 Win Server 2019 上构建


1
投票

更改自

vmImage: 'windows-latest'

vmImage: 'windows-2019'

为我工作。它曾经工作得更早,因为 2019 年是最新的,现在最新的是 2022 年,这有问题。

https://github.com/actions/runner-images/issues/5055


0
投票

我也遇到这个问题了。这是我尝试解决它的(不成功的)进展

将我的所有解决方案项目从各种版本的 .NET Framework 切换到现在全部定位“.NET Framework 4.8”后,我在 Visual Studio 2022 社区中也遇到了此问题。

我的错误(几乎与OP的相同):

C:\ Program Files \ dotnet \ sdk .0.101 \ Microsoft.Common.CurrentVersion.targets(1217,5):错误MSB3644:找不到.NETFramework,Version = v2.0的参考程序集。要解决此问题,请安装此框架版本的开发人员包(SDK/目标包)或重新定位您的应用程序。您可以在 https://aka.ms/msbuild/developerpacks [C:\Users\MyUsername\source epos\MyRepo1\Source\Libs\MyLibs\MyLibProject\MyLibProject.csproj]

此错误提到了文件

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”之外,我没有看到任何其他建议,所以我现在不确定如何继续。


0
投票

我通过从 Visual Studio 2022 降级到 Visual Studio 2014 解决了这个问题。我卸载了 Visual Studio 2022 并安装了 Visual Studio 2014,其余的就完成了。我的安装现已启动并运行。


0
投票

我的解决方案是使用 VSBuild@1 task 并使用旧版本的 Visual Studio,我使用的是 Visual Studio 2013,但我不确定它是否是唯一有效的解决方案。我还使用 windows-2019 设置了 vmImage 池。

© www.soinside.com 2019 - 2024. All rights reserved.