0

我有一个 Silverlight 解决方案,它有多个 Silverlight 项目(视图),它们都编译到自己的 .Xap 文件中。

有一个“主”项目可以处理 Xap 文件的动态下载,效果很好。

但现在我需要确保所有 View Projects 中的所有引用都设置为 CopyLocal=false。只有“主”项目可以有 CopyLocal=true。

这意味着由 Views 生成的 Xap 文件相当小。

我想做的是检查发布或在构建过程中查看是否有任何 View 项目具有 CopyLocal=true 的引用。

这样做的聪明方法是什么?在 Post Build 事件中使用外部工具?或者也许是 Visual Studio 的插件?或者为此在 Visual Studio 中创建一个宏?

我已经研究过将 .extmap 与程序集缓存一起使用,但是由于您必须在其中指定程序集,因此这并不能解决我的问题。我只需要知道是否有错误设置的参考并报告。修复它不是问题,仍然需要手动完成。这只是我需要的通知。

解决方案现在有 35 个项目,所以不想每次都手动检查它们。

我发现了一个与此类似的问题,但它将 msbuild 列为可能的解决方案。我想知道是否有办法使用“代码”来做到这一点(无论是在工具/插件中预建还是其他)

4

2 回答 2

0

我选择了 Addin 路径。我创建了一个插件来监听:BuildEvents.OnBuildBegin

每当该事件触发时,我都会创建当前解决方案中所有项目的列表。进行一些递归搜索,因为还有一些解决方案文件夹使 DTE 世界的生活变得更加困难。

然后我遍历所有项目并将它们转换为 VSProject,这样我就可以遍历所有引用。

每当我遇到错误的引用时,我都会创建一个 ErrorTask,在其中将 Document 属性设置为引用的完整解决方案路径。为此,我为该引用所在的项目构建路径,一直到解决方案的根目录。

然后将 ErrorTask 发送到我创建的 ErrorListHelper 类,该类处理 ErrorTasks 并执行导航。

如果我完成了所有项目并且发现了任何错误,我将取消当前构建并显示错误列表窗口,其中我的 ErrorListHelper 包含我创建的所有参考错误。

每当我想导航到有问题的参考时,我都会激活解决方案资源管理器窗口并使用 UIHierarchy 获取它的根。

然后我一步一步地从根部向下走,使用 UIHierarchy 到达 UIHierarchyItems 并展开它们。直到我到达最深层次(参考)并选择它。

因为我只需要它用于某个解决方案并且在该解决方案中用于某些项目(.Views.* 和 .ViewModels.*),所以我还需要在错误列表的构建过程中检查那些到位。

它就像一个魅力,已经在 35 个项目中发现了 12 个“错误”的参考资料,我认为这些参考资料都很好。

于 2012-03-04T12:20:32.807 回答
0

我现在正在使用不同的路径来执行此操作。我有一个基类,可用于编写可以访问 DTE2 对象的单元测试。这样我就不需要插件了。这也适用于 Silverlight 项目,因为测试类实际上不需要访问 Silverlight 项目,只要在解决方案中就足以能够遍历项目并检查引用。

于 2013-01-24T05:05:32.220 回答