我正在创建一个Visual Studio 2017自定义签入策略扩展 . 我目前的解决方案结构如下:
注意:我正在利用新的NuGet PackageReference方法,这就是没有packages.config文件的原因 .
我相信我已经适当地设置了我的VSIX清单,因为当我没有引用 Microsoft.Net.Http
时,一切都很完美(原来我在值中硬编码而不是检索值) . 我不确定为什么包含 Microsoft.TeamFoundationServer.ExtendedClient
NuGet包不会导致任何问题,而 Microsoft.Net.Http
NuGet包确实存在问题 .
我查看了调试文件夹以查看正在编译的内容,并且我看到每个程序集都被拉入,但是如果我解压缩VSIX(我将其重命名为* .zip并解压缩它),则只包含项目程序集; Nuget引用的程序集未打包在VSIX包中 .
我遇到了一些资源,但似乎没有任何工作:
-
VSIX Package doesn't include referenced project's dependencies
-
How to include a Nuget package in a Visual Studio Extension (vsix)
-
VSIX extension - How can I ensure a referenced dll or assembly is included in the VSIX file?
这些问题/答案中的每一个似乎都没有解决我的具体问题 .
Update:
我相信用于生成VSIX包的工具可能不支持NuGet的新 PackageReference
功能 . 如果我使用旧的packages.config功能,一切正常 . 我已经输入UserVoice Ticket来支持新的NuGet功能 .
3 回答
通过执行以下Microsoft教程中概述的步骤,我能够在模板中成功包含NuGet包:Packages in Visual Studio templates
我见过其他人因为他们正在使用的NuGet包而遇到问题 . 对于.NET Core,我使用了Microsoft.Net.Http,虽然它确实需要Microsoft.BCL . 除非您遇到问题,否则我建议保留遗留系统,特别是因为这些命名空间似乎是移动目标 .
看来System.Net.Http是正确的选择,至少在Windows平台上是.NET . 此包没有外部依赖性也是值得的 .
EDIT: 看来这可能与
PackageReference
本身的错误有关 . 我看到here描述了一个类似的记录错误 .对于那些像我们一样面对这个问题的穷人(nuget使用PackageReference和VSIX依赖),我找到了一个解决方法,受到这篇文章的启发:NuGet packages referenced via PackageReference don't include DLLs in VSIX对我来说没有完全起作用(它包括仅仅元数据的程序集版本) ,而不是带代码的完整程序集) . 例如,在这里,我手动引用了4个nuget包:
PS:使用Visual Studio 2017从15.5.4到15.7.3进行测试
适用于Visual Studio 2017的选项是NuGet packages referenced via PackageReference don't include DLLs in VSIX . 但是,请使用作者建议的版本:
不要尝试Simon Mourier建议的版本 . 这可能在VS 2015中有效,但它现在不起作用 . 另请注意,此解决方案适用于NuGet的PackageReference版本 . 它可能适用于packages.config,但我没有耐心测试它 .