VSIX包不包含引用项目的依赖关系。

6
我们有一个Visual Studio插件包(VS Package),它引用了一个类库项目(Project A)。Project A又引用了另一个类库项目(Project B)。
因此,依赖结构如下:VS Package > Project A > Project B
所有项目都存在于同一个解决方案中,并且依赖关系已经设置为正确的项目引用。
如果我在Visual Studio中构建包并查看bin/Debug文件夹,所有必要的程序集都在那里,包括Project B的。然而,当部署程序包时,只有Project A的程序集存在,而Project B的程序集则缺失。如何告诉Visual Studio在包中包含Project B的间接依赖项?
这个MSDN文档(链接)建议:“默认情况下,在多项目解决方案中,如果输出到VSIX包的项目包括对同一解决方案中的另一个项目的引用,则它会包括该项目的依赖项。”
然而我发现这并不是事实。
我的问题与这个非常相似,只是我在处理主项目组装而不是本地化卫星组装时遇到了麻烦。那篇文章中的答案对我来说不起作用,因为它似乎只适用于卫星组件。
是否有其他输出组可以指定以便将间接依赖项包含在软件包中?
感谢您的关注。

我无法重现这个问题。你确定VSPackage -> ProjectA和ProjectA -> ProjectB之间存在源码级别的依赖关系吗(即ProjectA中的某个类型使用了ProjectB中的一个类型)? - Aaron Marten
@AaronMarten 感谢您的回复。 代码中存在源级别依赖关系。 删除任何一个项目引用都会导致大量构建错误,其中无法找到被引用的类。 我已经创建了一个简单的解决方案来展示我的问题,可以在此处下载: [HERE](http://www.gogofile.com/Default.aspx?p=sc&ID=634817287005530000_4331) - Martyn
2个回答

2
在这种情况下,最简单的做法是从VSPackage项目中引用Project B,并将“Reference Output Assembly”属性设置为False,以避免引入编译时依赖。

1
是的,这是显而易见的解决方案,也是我为了短期内让它工作而采取的措施。然而,我想要深入了解为什么它不能像应该那样工作。你有测试过我上传的示例解决方案吗? - Martyn

1
我遇到了类似的问题:我的VS包项目引用了另一个VS包项目(~Project A),而后者又引用了一堆其他项目(~Project B),这些项目包含了我们扩展的实质内容。
受到这个答案的启发:VSIX package doesn't include localized resources of referenced assembly,我在从VS Package到Project A的引用中添加了“BuiltProjectOutputGroup;BuiltProjectOutputGroupDependencies;GetCopyToOutputDirectoryItems;SatelliteDllsProjectOutputGroup”到“Output Groups Included in VSIX”属性中。
这样做的效果是将所有依赖的DLL文件放到了我的VS项目的“...\Debug\”文件夹中,但它们仍未被包含在VSIX中。
最后,我添加了BuiltProjectOutputGroup;BuiltProjectOutputGroupDependencies;GetCopyToOutputDirectoryItems;SatelliteDllsProjectOutputGroup标志到从我的项目A到每个项目B的所有引用中 - 然后它们都被包含在VSIX中。
(顺便说一下,这是使用Visual Studio 2013进行的,但似乎自2010年以来并没有太大变化)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接