【问题标题】:Converting a Class Library (e.g., WP8, Windows Store) into a Portable Class Library将类库(例如,WP8、Windows Store)转换为可移植类库
【发布时间】:2015-01-05 23:14:09
【问题描述】:

假设,我创建并扩展了一个 Windows Phone 类库 (WPCL) 项目或任何其他针对特定平台的类库项目。

说,我现在正在考虑针对另一个 .NET 平台,例如 Windows 应用商店,但是在创建我的类库时,我选择创建一个特定于平台的类库(例如我的 WPCL)而不是可移植类库(PCL)。

编写的源代码是可移植的,它只需要一个 PCL 项目文件 (csproj)。

从 WPCL 和 PCL csproj 的比较来看,似乎只有几个属性不同。但是我是否需要破解 csproj 才能完成工作?

基本上,我想知道是否,

有没有办法在不破解 csproj 文件的情况下自动将特定于平台的类库转换为可移植类库?

【问题讨论】:

  • 好吧,您可以创建一个 new 项目并在每个项目中使用相同的 .cs 文件...有一个方便的“include *.cs resursive”选项可用,它如果你愿意,可以让它免维护
  • @MarcGravell 您是否在谈论文件和文件夹从一个项目到另一个项目的“拖放”,在拖放时按下 ALT 键?如果这就是您的意思,最好指出它只是“删除”文件的“免维护”;如果您稍后将新文件添加到“源”项目或从“源”项目中删除文件,这些修改将不会反映在“目标”项目中。
  • @Anders 不,我是认真的。您可以使用通配符而不是名称将文件添加到 csproj - 在单个文件夹中或递归。我在所有多目标工作中都使用它,所以我实际上只维护“核心”项目。其余的只是自动使用所有 .cs 文件。通配符被保留,因此它现在和将来都适用。
  • 感谢您的澄清,@Mark,我不知道这是可能的。这在 MSDN 文档的某处有描述吗?

标签: c# windows-phone-8 portable-class-library csproj


【解决方案1】:

我知道您要求的是非黑客方式,但由于它非常简单,我还是发布了解决方案: http://geekswithblogs.net/imilovanovic/archive/2012/08/31/vs2012---how-to-manually-convert-.net-class-library-to.aspx

这工作得很好,但它似乎不再适用于 VS2013(它没有向您显示更改目标对话框,而只有一个包含所有可能组合的下拉框)。我玩了一下,想出了如何将 csproj 更改为面向 Windows 8.1 的便携式库。我不知道是否有任何副作用(老实说,我不知道自己在做什么),但至少我看不到转换后的和原始的可移植库之间没有区别,并且一切都编译得很好.

将导入语句(通常在文档末尾)替换为以下内容:

<Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" />

将以下标签添加到第一个属性组

<ProjectTypeGuids>{BC8A1FFA-BEE3-4634-8014-F334798102B3};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<TargetPlatformIdentifier>Windows</TargetPlatformIdentifier>
<TargetPlatformVersion>8.1</TargetPlatformVersion>

最后删除 TargetFrameworkTag。

该项目现在应该是一个引用 Windows 8.1 的可移植库 - 只需将其更改为您现在喜欢的任何内容。

注意:我没有尝试,但我猜这仅适用于 VS2013(2012 年使用上面的链接)。

【讨论】:

    【解决方案2】:

    您可以使用following Visual Studio Extension 自动执行此操作。

    安装后选择“工具>将项目转换为PCL”并选择要转换的项目。

    【讨论】:

    • 目前仅支持 Visual Studio 2013、2012(不支持 2015)
    【解决方案3】:

    不,目前没有办法做到这一点。如果您的代码完全可移植,我建议切换到 PCL。我认为他最好的方法是在同一文件夹中创建一个新的 PCL 项目,编辑可移植的 .csproj 并从特定于平台的项目文件中复制项目,然后删除特定于平台的项目并将可移植的项目重命名为与旧平台特定名称相同。

    【讨论】:

    • 所以我不得不这样做。有一些项目需要转换,这是很多杂乱无章的工作。不过,我看不出为什么特定于平台的类库不仅仅是选择了单一平台选项的 PCL。
    • 查看stackoverflow.com/a/11965678/254041如何将类库转换为可移植类库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    相关资源
    最近更新 更多