【发布时间】:2018-08-15 14:29:45
【问题描述】:
我在 VS for Mac 中遇到了一个奇怪的行为。这就是我复制它的方式:
- 使用 VS2017 构建了一个 .NET Standard 2.0 NuGet 包。包名为“MobileApps.Auth 1.0.0”
- 将 NuGet 推送到我们公司的 NuGet 服务器
- 切换到 Mac 并启动 VS
- 在 Mac 上;构建了一个 Xamarin Forms 应用(共享项目也是 .NET Standard 2.0)
- 添加了对 .NET Standard 2.0 NuGet 的引用
错误:
Package MobileApps.Auth 1.0.0 is not compatible with netstandard2.0 (.NETStandard,Version=v2.0). Package MobileApps.Auth 1.0.0 supports:
- monoandroid81 (MonoAndroid,Version=v8.1)
- xamarinios10 (Xamarin.iOS,Version=v1.0)
对于 NuGet 为何支持monodroid81 和xamarinios10,我没有任何线索。这是一个引用 Xamarin.Forms 的 .NET Standard 2.0 库。
如果我改为留在 PC 上并在 Visual Studio 2017 中运行第 4 步和第 5 步,一切都很好。
这听起来像是 VS for Mac 中的错误。有没有其他人看过这个?
总的来说,我花了几天时间在 Mac 和 PC 上构建基于 .NET Standard 2.0 的 NuGet 包,我总体感觉这在 Mac 上并不适用。我在 VS2017 上构建 NuGet 的原因是因为在 VS for Mac 上构建的 NuGet 包包含导致 msbuild 由于冲突而失败的各种外观(在多个引用的程序集中找到相同的标识符)。
[编辑 1]
这是在 VS4M 上构建包时的 NuGet 布局:
_rels (empty folder)
[Content_Types].xml
lib
netstandard2.0
MobileApps.Auth.dll (my lib)
(+ 113 other dlls)
MobileApps.Auth.nuspec
package
services
metadata
core-properties
5bd1f861cd8a425f854c073a4a5f3e0e.psmdcp
这是在 VS2017 上构建时的 NuGet 布局:
_rels
.rels
[Content_Types].xml
lib
netstandard2.0
MobileApps.Auth.dll (my lib)
MobileApps.Auth.nuspec
package
services
metadata
core-properties
5bd1f861cd8a425f854c073a4a5f3e0e.psmdcp
不同之处在于 VS4M 在 netstandard2.0 文件夹中包含 113 个额外的 dll,而 VS2017 没有。我该如何控制?
[编辑 2]
这是 .nupkg 中的 .nuspec,使用 VS4M 构建:
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
<metadata>
<id>MobileApps.Auth</id>
<version>0.1.1</version>
<title></title>
<authors>Jonas Rembratt</authors>
<owners>Jonas Rembratt</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>bla bla</description>
<summary></summary>
<releaseNotes></releaseNotes>
<copyright></copyright>
<language></language>
<dependencies>
<group targetFramework=".NETStandard2.0">
<dependency id="Xamarin.Forms" version="3.1.0.697729" />
<dependency id="System.ValueTuple" version="4.5.0" />
</group>
</dependencies>
</metadata>
</package>
【问题讨论】:
-
奇怪,我一直在创建 NetStd nugets 并没有在 VS4M 上看到这个问题...... nuget 包的物理布局如何? (即,如果您解压缩 nuget 并手动将 ref 添加到 .dll 中,它在引用的项目中是否可以正常工作?)
-
NuGet 包含了大量的库,据我所知,没有真正的原因。是的,我可以从 NuGet 解压 .dll 并成功引用它,但如果我只是以常规方式添加 NuGet,我会得到大量 CS1703(“已导入具有等效标识的多个程序集:...”)。有没有办法避免 NuGet 塞满不必要的包或解决这些冲突?
-
nuget 中的物理布局是什么?
-
_rels(空文件夹)[Content_Types].xml lib netstandard2.0 MobileApps.Auth.dll(我的 lib)(+ 114 个其他 dll)MobileApps.Auth.nuspec 包服务元数据核心属性 5bd1f861cd8a425f854c073a4a5f3e0e。 psmdcp
-
这是非常明智的结果。只有当它使用的所有东西都是标准的时,库才能成为.netstandard。 xamarin 表单没有任何标准,这样的库只能在 xamarin 项目中使用。
标签: xamarin.forms nuget .net-standard visual-studio-mac