引用针对多个框架 C# WPF 的项目时生成问题
Build issues when referencing project that targets multiple frameworks C# WPF
我正在努力将大型 WPF 解决方案的项目转换为 SDK 样式,运行 遇到一些问题。
解决方案很大,有多个项目(旧式)都针对 .net452 和安装了一些 nugets(有些是我制作的),同时针对 .net452 和 .netstandard2.1
这一切似乎都工作正常,不知何故 nuget 设法安装了针对 .net452 的正确版本。
我决定慢慢将解决方案中的项目转换为 SDK 样式,就像 nugets 一样,以 .net452 和 .netstandard2.1 为目标。
这就是问题开始的地方,到目前为止,一个项目被转换为多个其他项目所引用。
本地一切似乎都已构建并且 运行 很好,但是当使用 Azure DevOps(VS 2019 版)构建解决方案时,有两种情况:
显示著名的错误消息:
“错误 CS0012:类型 'Object' 在未引用的程序集中定义。您必须添加对程序集 'netstandard,Version=2.1.0.0' 的引用”
构建良好,但在应用启动时崩溃:
“无法加载文件或程序集 'netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' 或其依赖项之一。系统找不到指定的文件。”
我怀疑问题与引用 SDK 项目有关,看起来它以某种方式引用了 .netstandard2.1 而不是 .net452。
我怀疑的原因是,如果在引用的项目上将 targetframework 设置为仅 .net452,则一切正常。
Google 让我找到了两种可能的解决方案来告诉项目使用参考的框架:
<ProjectReference Include="..\..\..\..\foo\foo.csproj"
AdditionalProperties="TargetFramework=net452">
<Project>{xxxxxx-xxxxxx-xxxxx-xxxxx-xxxxxxx}</Project>
<Name>foo</Name>
</ProjectReference>
和
<ProjectReference Include="..\..\..\..\foo\foo.csproj">
<SetTargetFramework>TargetFramework=net452</SetTargetFramework>
<Project>{xxxxxx-xxxxxx-xxxxx-xxxxx-xxxxxxx}</Project>
<<Name>foo</Name>
</ProjectReference>
这看起来没有任何作用,而且问题仍然存在。
目前我 运行 没有想法,我在这里寻求帮助。请让我知道我做错了什么或者我还能尝试什么。
我找到问题了。问题是我在 AzureDevOps 中设置了一个输出目录。当项目的构建完成后,所有内容都被复制到那里,首先是 .net4.5.2 目标 DLL,然后用 netstandard2.1 dll 覆盖。为了避免这个问题发生在任何人身上,让编译器默认将文件放在根项目中,然后将它们复制到任何你想要的地方。
我正在努力将大型 WPF 解决方案的项目转换为 SDK 样式,运行 遇到一些问题。
解决方案很大,有多个项目(旧式)都针对 .net452 和安装了一些 nugets(有些是我制作的),同时针对 .net452 和 .netstandard2.1 这一切似乎都工作正常,不知何故 nuget 设法安装了针对 .net452 的正确版本。
我决定慢慢将解决方案中的项目转换为 SDK 样式,就像 nugets 一样,以 .net452 和 .netstandard2.1 为目标。
这就是问题开始的地方,到目前为止,一个项目被转换为多个其他项目所引用。 本地一切似乎都已构建并且 运行 很好,但是当使用 Azure DevOps(VS 2019 版)构建解决方案时,有两种情况:
显示著名的错误消息:
“错误 CS0012:类型 'Object' 在未引用的程序集中定义。您必须添加对程序集 'netstandard,Version=2.1.0.0' 的引用”
构建良好,但在应用启动时崩溃:
“无法加载文件或程序集 'netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' 或其依赖项之一。系统找不到指定的文件。”
我怀疑问题与引用 SDK 项目有关,看起来它以某种方式引用了 .netstandard2.1 而不是 .net452。
我怀疑的原因是,如果在引用的项目上将 targetframework 设置为仅 .net452,则一切正常。 Google 让我找到了两种可能的解决方案来告诉项目使用参考的框架:
<ProjectReference Include="..\..\..\..\foo\foo.csproj"
AdditionalProperties="TargetFramework=net452">
<Project>{xxxxxx-xxxxxx-xxxxx-xxxxx-xxxxxxx}</Project>
<Name>foo</Name>
</ProjectReference>
和
<ProjectReference Include="..\..\..\..\foo\foo.csproj">
<SetTargetFramework>TargetFramework=net452</SetTargetFramework>
<Project>{xxxxxx-xxxxxx-xxxxx-xxxxx-xxxxxxx}</Project>
<<Name>foo</Name>
</ProjectReference>
这看起来没有任何作用,而且问题仍然存在。 目前我 运行 没有想法,我在这里寻求帮助。请让我知道我做错了什么或者我还能尝试什么。
我找到问题了。问题是我在 AzureDevOps 中设置了一个输出目录。当项目的构建完成后,所有内容都被复制到那里,首先是 .net4.5.2 目标 DLL,然后用 netstandard2.1 dll 覆盖。为了避免这个问题发生在任何人身上,让编译器默认将文件放在根项目中,然后将它们复制到任何你想要的地方。