我有一个Silverlight解决方案,它有多个Silverlight项目(视图),所有项目都编译为自己的.Xap文件。
有一个“主”项目可以处理Xap文件的动态下载,效果非常好。
但现在我需要确保在所有View Projects中将所有引用设置为CopyLocal = false。只有“主”项目才能拥有CopyLocal = true。
这意味着Views生成的Xap文件相当小。
我想要做的是检查帖子或在构建过程中查看是否有任何View项目具有CopyLocal = true的引用。
这样做的聪明之处是什么?在Post Build事件中使用外部工具?或者也许是Visual Studio的插件?或者在Visual Studio中为此创建宏?
我已经看过将.extmap与汇编缓存一起使用,但由于你必须在其中指定程序集,这并不能解决我的问题。我只需要知道是否有错误设置的引用并报告。修复它不是问题,仍然可以手动完成。这只是我需要的通知。
解决方案现在有35个项目,所以不想每次都手动检查它们。
我发现了一个与此类似的问题,但它将msbuild列为可能的解决方案。我想知道是否有办法使用“代码”(在工具/插件或其他方面预先构建)
答案 0 :(得分:0)
我选择了Addin路径。我创建了一个监听的插件:BuildEvents.OnBuildBegin
每当该事件触发时,我都会在当前解决方案中创建所有项目的列表。做一些递归搜索,因为还有一些解决方案文件夹让DTE世界的生活变得更加困难。
然后我遍历所有项目并将它们转换为VSProject,这样我就可以遍历所有引用。
每当我遇到一个错误的引用时,我创建一个ErrorTask,我将Document属性设置为引用的完整解决方案路径。为此,我为此引用所在的项目构建路径,一直到解决方案的根目录。
然后将ErrorTask发送到我创建的ErrorListHelper类,该类处理ErrorTasks并执行导航。
如果我已完成所有项目并且发现任何错误,我将取消当前版本并显示错误列表窗口,其中我的ErrorListHelper包含我创建的所有参考错误。
每当我想要导航到相关的Reference时,我都会激活Solution Explorer窗口并使用UIHierarchy获取它的根目录。
然后我一步一步地从根向下走路径,使用UIHierarchy到达UIHierarchyItems并展开它们。直到我达到最深层次(参考)并且我选择它。
由于我只需要某个解决方案,并且在某个项目的解决方案中(.Views。*和.ViewModels。*),我也会在错误列表的构建过程中检查它们。
它的作用就像一个魅力,已经在35个项目中找到了12个“错误的”参考文献,我认为它们都很好。
答案 1 :(得分:0)
我现在正在使用不同的路径来执行此操作。我有一个基类,我可以用来编写有权访问DTE2对象的单元测试。这样我就不需要添加。这也适用于Silverlight项目,因为测试类实际上不需要访问Silverlight项目,只需在解决方案中就足以能够遍历项目并检查引用。