如何在 Visual Studio 扩展中包含 Nuget 包 (vsix)
How to include a Nuget package in a Visual Studio Extension (vsix)
我创建了一个 Visual Studio 扩展 (VSIX),它使用 Roslyn 更改了我们应用程序的代码。
VSIX 解决方案包括 NUGET 包 Microsoft.CodeAnalysis.Analyzers。顺便说一句,它被描述为版本 1.3.2,但底层 DLL(例如 "Microsoft.CodeAnalysis.CSharp.dll")都报告为 1.3.2。
无论如何,我把它放在我们当地的私人画廊里了。从那里,我可以将它添加到 Visual Studio(VS2015 更新 3)并按预期执行。
但是,在我的同事将它添加到他们的 Visual Studio(VS2015 更新 3)并尝试执行它之后,他们收到以下消息:
Microsoft Visual Studio
Could not load file or assembly 'Microsoft.VisualStudio.LanguageServices, Version=1.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.
OK
当我查看 VSIX 存档时,我确实看到了很多 DLL,但这些是 "my DLL" 并且所有那些都带有前缀 "System."。我没有看到前缀为 "Microsoft." 的任何内容。我确实尝试手动将我的 BIN 文件夹中的每个 DLL 复制到 VSIX 以查看它是否会有任何不同,但没有成功。
所有引用的 DLL 似乎都有 "copy local",所以它们在我的 BIN 中,但它们在最终用户的机器上无法访问。
我看到清单可以同时包含 "Assets" 和 "Dependencies",但尚不清楚这些是否可用于 NUGET 包。
我错过了什么?
最终找到答案:
VSIX with Project Templates and NuGet Packages
- 查看 Min(2013 年 8 月 28 日)关于他的 YouTube 视频的回答
- 并注意 KyleMit 关于此内容出现在相当长的视频中的位置的评论。
修复程序相当冗长,最好在他的视频中展示。
我使用 roslyn 为自定义命令收到了相同的异常,如上所述,Microsoft.CodeAnalysis DLL 未包含在其中,而其他引用的 DLL 或 NuGet 包已添加。但是,一旦我将 NuGet 中的依赖项降级为 Visual Studio 使用的版本,通常可以在 C:\Program Files (x86)\Microsoft Visual Studio [版本号,例如'14.0']\Common7\IDE\PrivateAssemblies 不再发生异常,因为它只是使用了可用的 dll。
我创建了一个 Visual Studio 扩展 (VSIX),它使用 Roslyn 更改了我们应用程序的代码。
VSIX 解决方案包括 NUGET 包 Microsoft.CodeAnalysis.Analyzers。顺便说一句,它被描述为版本 1.3.2,但底层 DLL(例如 "Microsoft.CodeAnalysis.CSharp.dll")都报告为 1.3.2。
无论如何,我把它放在我们当地的私人画廊里了。从那里,我可以将它添加到 Visual Studio(VS2015 更新 3)并按预期执行。
但是,在我的同事将它添加到他们的 Visual Studio(VS2015 更新 3)并尝试执行它之后,他们收到以下消息:
Microsoft Visual Studio
Could not load file or assembly 'Microsoft.VisualStudio.LanguageServices, Version=1.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.
OK
当我查看 VSIX 存档时,我确实看到了很多 DLL,但这些是 "my DLL" 并且所有那些都带有前缀 "System."。我没有看到前缀为 "Microsoft." 的任何内容。我确实尝试手动将我的 BIN 文件夹中的每个 DLL 复制到 VSIX 以查看它是否会有任何不同,但没有成功。
所有引用的 DLL 似乎都有 "copy local",所以它们在我的 BIN 中,但它们在最终用户的机器上无法访问。
我看到清单可以同时包含 "Assets" 和 "Dependencies",但尚不清楚这些是否可用于 NUGET 包。
我错过了什么?
最终找到答案:
VSIX with Project Templates and NuGet Packages
- 查看 Min(2013 年 8 月 28 日)关于他的 YouTube 视频的回答
- 并注意 KyleMit 关于此内容出现在相当长的视频中的位置的评论。
修复程序相当冗长,最好在他的视频中展示。
我使用 roslyn 为自定义命令收到了相同的异常,如上所述,Microsoft.CodeAnalysis DLL 未包含在其中,而其他引用的 DLL 或 NuGet 包已添加。但是,一旦我将 NuGet 中的依赖项降级为 Visual Studio 使用的版本,通常可以在 C:\Program Files (x86)\Microsoft Visual Studio [版本号,例如'14.0']\Common7\IDE\PrivateAssemblies 不再发生异常,因为它只是使用了可用的 dll。