引用针对多个框架C#WPF的项目时的构建问题

引用针对多个框架C#WPF的项目时的构建问题,c#,wpf,azure-devops,desktop-application,.net-standard,C#,Wpf,Azure Devops,Desktop Application,.net Standard,我正在将一个大型WPF解决方案的项目转换为SDK风格,并遇到了一些问题 该解决方案非常庞大,安装了多个项目(旧式),所有项目都以.net452为目标,并安装了一些NuGet(一些由我制造),同时以.net452和.netstandard2.1为目标 这一切似乎都很好,不知何故,nuget成功地安装了正确的targeting.net452版本 我决定慢慢地将解决方案中的项目转换为SDK风格的targeting.net452和.netstandard2.1,就像nugets一样 这就是问题开始的地方

我正在将一个大型WPF解决方案的项目转换为SDK风格,并遇到了一些问题

该解决方案非常庞大,安装了多个项目(旧式),所有项目都以.net452为目标,并安装了一些NuGet(一些由我制造),同时以.net452和.netstandard2.1为目标 这一切似乎都很好,不知何故,nuget成功地安装了正确的targeting.net452版本

我决定慢慢地将解决方案中的项目转换为SDK风格的targeting.net452和.netstandard2.1,就像nugets一样

这就是问题开始的地方,到目前为止,一个项目被转换,被多个其他项目引用。 在本地,一切似乎都可以正常构建和运行,但是当使用Azure DevOps(VS版本2019)构建解决方案时,有两种情况:

  • 著名的错误消息如下所示:

    错误CS0012:在未引用的程序集中定义了类型“Object”。必须添加对程序集“netstandard,Version=2.1.0.0”的引用

  • 它构建良好,但在应用程序启动时崩溃:

    无法加载文件或程序集“netstandard,Version=2.1.0.0,Culture=neutral,PublicKeyToken=CC7B13FFCD2DD51”或其依赖项之一。系统找不到指定的文件

  • 我怀疑这个问题与引用SDK项目有关,它似乎引用了.netstandard2.1而不是.net452

    我之所以怀疑这一点,是因为如果在引用的项目上将targetframework设置为only.net452,则一切正常。 谷歌让我找到了两种可能的解决方案,告诉项目从参考中使用什么样的框架:

    <ProjectReference Include="..\..\..\..\foo\foo.csproj"
                      AdditionalProperties="TargetFramework=net452">
          <Project>{xxxxxx-xxxxxx-xxxxx-xxxxx-xxxxxxx}</Project>
          <Name>foo</Name>
    </ProjectReference>
    
    
    {xxxxxx-xxxxxx-xxxxx-xxxxx-xxxxx-xxxxxx}
    福
    

    
    TargetFramework=net452
    {xxxxxx-xxxxxx-xxxxx-xxxxx-xxxxx-xxxxxx}
    
    我发现了问题所在。问题是我在AzureDevOps中设置了一个输出目录。当项目的构建完成时,所有内容都被复制到那里,首先是.net4.5.2目标DLL,然后被netstandard2.1 DLL覆盖。为了避免在任何人身上发生这种情况,默认情况下,让编译器将文件放入根项目中,然后将它们复制到任何您想要的地方


    基本上,我所做的就是将引用的项目转换为SDK样式,因此所有其他引用都与以前相同,这太好了,您修复了它!你可以接受你的上述回答。
    <ProjectReference Include="..\..\..\..\foo\foo.csproj">
          <SetTargetFramework>TargetFramework=net452</SetTargetFramework>
          <Project>{xxxxxx-xxxxxx-xxxxx-xxxxx-xxxxxxx}</Project>
          <<Name>foo</Name>
    </ProjectReference>