我有一个解决方案包含:
框架项目通过项目引用引用netstandard项目。
我正在尝试找到一种打包框架项目的方法,同时考虑到对netstandard项目的依赖(这样netstandard项目看起来是框架项目的依赖项,而不是捆绑在框架项目中)。
我试过了:
nuget pack -IncludeReferencedProjects
由于netstandard项目(一个已知问题,例如https://github.com/NuGet/Home/issues/4808),因为“无法将'System.String'类型的对象强制转换为'NuGet.Frameworks.NuGet.Frameworks1070507.NuGetFramework'”而失败<Import Project="$(MSBuildSDKsPath)\NuGet.Build.Tasks.Pack\build\NuGet.Build.Tasks.Pack.targets" />
)中导入nuget pack目标,然后dotnet pack
或msbuild /t:pack
这失败了有关缺少project.assets.json文件的错误(我不认为这是使用packages.config的项目?)
如果我进一步指定/p:NuspecFile=[path to nuspec]
,这会让我更进一步,事情似乎有效,但netstandard项目依赖项被捆绑为包的一部分如果我说得对,你想通过迁移旧项目中的代码来构建多目标NuGet包吗?
好吧,我通过创建新项目,设置多个目标,拖放所有项目并希望您拥有可存活数量的不受支持的程序集来定期执行此操作。
我已经为此编写了一份指南(实际上它是来自网络的思想汇编),并使用多目标项目模板进行了VS扩展。所以,如果我在你的鞋子里,我会安装扩展程序,创建新的“空白多目标项目”并复制旧项目中的所有项目。
就你的情况而言,你应该将.net45目标更改为等同于你的偏好。在教程中,您将找到有关不支持的程序集等的一些提示。它自己的项目模板为你完成了80%的工作。至少,在我的情况下(迁移9个库),一旦我采用了这种方法,它就是小菜一碟。
通过将nuget.exe
升级到4.9.3(原为4.5.1)解决了这个问题