强制 NuGet 包为 PCL 个项目使用短文件夹名称

Force NuGet pack to use short folder names for PCL projects

当 运行 在本地生成服务器上的版本时,我遇到了 NuGet 生成不同输出文件夹的问题。

当我在本地构建 PCL 项目时(使用 nuget 2.8.6),nuget 包中的文件夹结构是:

lib
- portable-net45 win wpa81 wp80 MonoAndroid10 xamarinios10 MonoTouch10
  - HC.Common.dll

然而,当我在构建服务器(TeamCity、nuget 2.8.2)上构建它时,我得到以下文件夹:

lib
- portable-Profile259
  - HC.Common.dll

如何确保两个构建输出一致的文件夹结构?这使得 "published" 版本和我的测试版本之间的切换非常棘手,因为参考路径在版本之间不匹配。

有没有办法强制 nuget 使用短 "Profile259" 名称?

如果 NuGet 可以确定它们,通常会将 PCL 配置文件替换为单独的目标框架。

在您的构建服务器上,您似乎没有安装 PCL 配置文件 xml 文件,因此 NuGet 不会转换目录。所以我假设您正在使用 NuGet pack YourProject.csproj。如果您使用 NuGet pack YourNuGet.nuspec .nupkg 中的目录在两台机器上都是相同的。

我不知道有任何 NuGet 包使用 portable-Profile78 形式的 PCL 目录,我很惊讶它能起作用,但它似乎确实有效。所有具有 PCLs 的 NuGet 包都具有以下形式的目录:

portable-net45+win+wpa81+wp80+MonoAndroid10+xamarinios10+MonoTouch10

因此,为了使它们在两台机器上保持一致,您需要在构建服务器上安装 PCL 配置文件或使用 NuGet pack YourNuSpec.nuspec,这样目录就不会被 NuGet.exe 重命名.