Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight 检查生成多项目解决方案(multi-Xap)期间/发布期间所有引用的CopyLocal属性_Silverlight_Reference_Build_Xap - Fatal编程技术网

Silverlight 检查生成多项目解决方案(multi-Xap)期间/发布期间所有引用的CopyLocal属性

Silverlight 检查生成多项目解决方案(multi-Xap)期间/发布期间所有引用的CopyLocal属性,silverlight,reference,build,xap,Silverlight,Reference,Build,Xap,我有一个Silverlight解决方案,它有多个Silverlight项目(视图),这些项目(视图)都编译成自己的.Xap文件 有一个“主”项目可以处理Xap文件的动态下载,它运行得非常好 但是现在我需要确保所有视图项目中的所有引用都设置为CopyLocal=false。只有“主”项目的CopyLocal=true 这意味着视图生成的Xap文件保持相当小 我想做的是检查post或在构建过程中,查看是否有任何视图项目具有CopyLocal=true的引用 这样做的明智方式是什么?在生成后事件中使用

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

有一个“主”项目可以处理Xap文件的动态下载,它运行得非常好

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

这意味着视图生成的Xap文件保持相当小

我想做的是检查post或在构建过程中,查看是否有任何视图项目具有CopyLocal=true的引用

这样做的明智方式是什么?在生成后事件中使用外部工具?或者是Visual Studio的加载项?或者在Visual Studio中为此创建宏

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

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


我发现了一个类似于此的问题,但它列出了msbuild作为可能的解决方案。我想知道是否有一种方法可以使用“代码”(无论它是在工具/addin中预构建的还是其他)来实现这一点。

我选择了addin路径。我创建了一个可侦听的加载项:BuildEvents.OnBuildBegin

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

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

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

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

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

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

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

由于我只需要在某个解决方案中使用它,并且在该解决方案中针对某些项目(.Views.*和.ViewModels.*)使用它,所以在构建错误列表的过程中,我还需要对这些问题进行一些检查


它就像一个魔咒,已经在35个项目中发现了12个“错误”的参考文献,我认为它们都很好。

我现在正在使用一种不同的方法来实现这一点。我有一个基类,可以用来编写可以访问DTE2对象的单元测试。这样我就不需要外接程序了。这也适用于Silverlight项目,因为测试类实际上不需要访问Silverlight项目,只要在解决方案中就足以遍历项目并检查引用