Phi*_*tle 12 c# visual-studio nuget visual-studio-extensions nuget-package-restore
我正在创建一个Visual Studio项目模板并将其捆绑在VS扩展中.我需要从模板创建的项目来引用~20个NuGet包.
是否有可能从nuget.org解析引用而不必包含VSIX中的所有引用?
Visual Studio模板上的NuGet文档提供了有关如何在VSIX中添加软件包的说明,但它要求将文件本地存储在磁盘上,并且.nupkg是vsix中的软件包:
将您的nupkg文件作为自定义扩展内容添加到source.extension.vsixmanifest文件中.如果您使用的是2.0架构,它应如下所示:
Run Code Online (Sandbox Code Playgroud)<Asset Type="Moq.4.0.10827.nupkg" d:Source="File" Path="Packages\Moq.4.0.10827.nupkg" d:VsixSubPath="Packages" />
问题已经问过
我知道有一个类似的问题(创建一个已经包含Nuget Package Reference的Visual Studio项目模板?)并回答(不可能),但是2011年就提出了这个问题.
5年后,还不可能吗?
由于仍然没有从在线回购中安装/升级软件包的内置功能,这里有一个小的解决方法可能会有所帮助:
先决条件
首先,将NuGet.VisualStudio nuget包安装到您的项目中.你从这里得到的
安装后,程序包将自动将程序集引用的Embed Interop Types属性设置为True.这样做的原因是当用户更新到较新版本的NuGet时,使您的代码能够抵御版本更改.
出于同样的原因,你必须不使用任何其它类型的,除了在你的代码上面的接口.您不能引用任何其他NuGet程序集,包括NuGet.Core.dll.
设置完所有内容后,您可以在RunFinished-Method中执行以下操作:
var componentModel = (IComponentModel) Package.GetGlobalService(typeof(SComponentModel));
IVsPackageInstallerServices installerServices =
componentModel.GetService<IVsPackageInstallerServices>();
if (!installerServices.IsPackageInstalled(project, "Newtonsoft.Json")) {
var installer = componentModel.GetService<IVsPackageInstaller>();
installer.InstallPackage(
"All",
project,
"Newtonsoft.Json",
(System.Version) null,
false);
}
Run Code Online (Sandbox Code Playgroud)
注意
该示例根据Newtonsoft.Json您如何安装软件包进行说明.您肯定可以选择面向安装的项目.您还可以确定要安装的版本.
这似乎有点不舒服,但遗憾的是没有别的办法.
Usings
using Microsoft.VisualStudio.ComponentModelHost;
using Microsoft.VisualStudio.Shell;
using NuGet.VisualStudio;
Run Code Online (Sandbox Code Playgroud)
如果有帮助,请告诉我!
| 归档时间: |
|
| 查看次数: |
1320 次 |
| 最近记录: |