【问题标题】:How can I change a PCL into a .net Platform Standard Library in Visual Studio 2017?如何在 Visual Studio 2017 中将 PCL 更改为 .net 平台标准库?
【发布时间】:2018-01-10 21:42:39
【问题描述】:

我试图弄清楚如何将可移植的 .net 类库更改为 .net 平台标准库。项目设置中有一个看起来正确的可点击链接,上面写着“Target .net platform standard”。

对我来说似乎很荒谬的错误是:

项目的目标不能更改。选定的目标需要 项目选择加入 NuGet 3.0 支持,但是 Visual Studio 不能 自动为您执行此操作。请卸载所有 NuGet 包并 再试一次。

有没有什么方法比上面的荒谬方法更有意义,即从字面上删除我的所有引用,然后尝试将它们添加回来?我不知道如何将这个我没有编写的项目转换为 .net 标准,除了将所有参考资料写在一张纸上,然后尝试再次添加它们。这真的是我被告知要做的吗?还有其他方法吗?我做错了吗?

其次,即使我删除了所有可以删除的引用,项目仍然不会转换。我删除了 Newtonsoft 和所有其他可以删除的引用,只留下不可删除的 .net、system 和 system.core。

我仍然遇到同样荒谬的错误。我正在尝试修改的项目是 github 上的一个开源项目,但我故意试图使这个问题更笼统,以便对遇到此“Target .net 平台标准不起作用”的其他人有用完全”的问题。

【问题讨论】:

  • 您可以在 Visual Studio for Mac 中执行此操作,但不能在 Visual Studio 2017 中执行此操作。因此,工具尚未准备好。另一个临时限制,尽管您应该能够手动编辑 csproj 文件(我不知道如何在 Windows 上)。
  • 又一个不是候选发布版 (NARC)。 :-)
  • 我宁愿说他们通过添加 .NET Core 支持搞砸了 VS RC。我对经典 .NET Framework 开发的个人测试几乎完美无缺,而 .NET Core SDK 预览版 3 确实是一个预览版......
  • 这方面有什么更新吗?
  • 这在 RTM 中仍然存在。不知道从这里做什么。该项目的所有 nuget 包都已删除。我在 package.config 中进行了验证(实际上仍然有一个我必须删除的引用)。也许这意味着从解决方案中删除(信息不清楚),但这将是一项重大任务。

标签: c# visual-studio-2017 .net-standard


【解决方案1】:

这里也一样

我为完全相同的问题苦苦挣扎:最有效的解决方案是@Jasper H Bojsen 提供的解决方案

所以我不得不:

  • 创建一个关于我在 pcl 中使用的命名空间的新项目
  • ReNuggetManageDownloadPackagesReferences
  • 并编译它,我没有错误

【讨论】:

    【解决方案2】:

    您可能需要手动修改项目文件。这需要一些工作,但这里有一些可以提供帮助的东西。

    在开始之前,请备份您的源(如果它没有托管在其他地方)。

    • 首先,确保项目使用与您将在下一步中创建的项目文件相同的文件格式。

    • 接下来,针对您正在寻找的框架创建一个新的解决方案和项目,并添加您正在使用的 NuGet 包。

    • 关闭新解决方案并打开您要更改的解决方案,然后在加载后卸载相关项目。编辑项目文件,并使用差异工具或手动打开您创建的新项目文件并比较两个项目文件之间的更改。您需要注意几个关键部分。

    • 完成项目文件的编辑后,将其关闭并重新加载项目。请注意可能返回的任何错误,并根据需要进行更正。如果一切正常,请尝试编译。

    这只是一种可能的解决方案,但根据经验,项目文件有很多小问题,因此不要将其视为最终解决方案。

    以下是两个不同项目文件之间差异的示例,因此从 PCL -> 标准迁移将比反过来容易得多。 (注意:这些只是我快速创建的基本项目,可能不代表您发现的内容。)

    PCL

    14.0调试AnyCPU{66c3d80b-6265-468a-82e1-b76317f9a9a5}PCLTestPCLTesten-US512文件对齐> {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}v5.0属性组> 完整假优化> bin\Debug\调试;跟踪提示4属性组> pdbonly真优化> bin\Release\跟踪提示4属性组> 项目>

    标准

    netstandard1.4属性组> 项目>

    【讨论】:

      【解决方案3】:

      我知道这可能不是您希望得到的答案,我不能排除其他人已经找到了不同的成功途径。

      无论如何。我有 6-7 PCL’s 我想迁移到 .NET Standard。在摆弄了一段时间试图找到自动前进的道路之后,我终于找到了一种更加务实的方法。

      我所做的是使用 Visual Studio 2017(v15.2 或更高版本)创建一个全新的 .NET Standard 项目。将 PCL 项目和新的 .NET Standard 项目并排打开(此处有两个监视器帮助)我基本上重新创建了新项目中的文件夹结构(使用 Visual Studio)复制到文件(使用资源管理器),添加了文件手动(使用 Visual Studio)到新项目,以及手动包含并重新建立引用。

      另外,请记住将 Assembly NameDefault Namespace 设置为与 PCL Assembly NameDefault Namespace。您可以通过右键单击项目并选择“属性”和“应用程序”选项卡来获得这些:

      我知道这听起来很无聊,但相信我,这不会花很长时间,而且这个过程非常不易出错。当新项目编译完成时。如果没有,通常很容易找出缺少的内容。此外,当它起作用时,您知道您已经从头开始,并且您不会拖累以后会回来并困扰您的事情。

      注意: 您可能会遇到 .NET Standard 中缺少的 System.* 库。如果发生这种情况,请查看是否可以将其添加为 NuGet。它们通常具有 4.3.* 版本。 System.Net.Security 就是一个例子。

      您的 PCL 也有可能依赖于与您决定的 .NET Standard 版本或任何 .NET Standard 不兼容的库。在第一种情况下,尝试看看您是否可以使用更高版本的 .NET Standard。在后一种情况下,您目前运气不佳,但请注意 .NET Standard 2.0,它将具有更广泛的 .NET API 支持。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-20
        • 1970-01-01
        • 2021-12-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多