我可能不完全理解wiki文章的范围,所以请原谅我,如果这听起来很傻。
简介:
我有一个包含40多个项目的解决方案(ABC.sln),并且正在尝试实现用于包管理的OpenWrap。因此,我在解决方案的根文件夹中执行了以下操作:
o init-wrap -all这很好:我现在在解决方案的根文件夹中有了一个名为SLN.wrapdesc的文件。子文件夹中的所有.csproj文件都包含OpenWrap目标行。
然后,我将不同的包装添加到解决方案中,包括:
o add-wrap -Name xxx同样,这也很好:我在wraps文件夹中有一些包装,并且在从项目中删除旧的引用之后,构建不会中断。
问题:
包装的所有内容都会用到所有的项目,即使是那些不需要它的项目。我希望能够指定哪些包装去哪里,如AjaxControlToolkit只进入网络项目。
我试过什么
首先,我从wrapdesc中删除了AjaxControlToolkit:
o remove-wrap AjaxControlToolkit这将导致生成中断(如预期的那样)。然后我尝试了以下几点:
o add-wrap -Name AjaxControlToolkit -scope webproject这只会将包装放回wraps文件夹中。然后我将<OpenWrap-Scope>customscope</OpenWrap-Scope>添加到项目文件中,但构建仍然失败。
The "exists" function only accepts a scalar value, but its argument "@(_WrapFile->'%(FullPath)')" evaluates to "D:\Projects\ABC.webproject.wrapdesc;D:\Projects\ABC.wrapdesc" which is not a scalar value.我想它不喜欢2个wrapdesc文件。这很奇怪,因为wiki说"...you可以在默认描述符的旁边添加第二个描述符.“
所以现在我被困住了。有人有什么想法吗?
发布于 2011-11-30 15:21:41
per文件实际上并不是管理依赖关系的推荐方法。每个项目这样做并不完全是OpenWrap背后的设计理念,因此对于这些场景,系统并不是非常优化的。
如果您不需要来自这些程序集的东西,那么解决它的最简单的方法就是不使用来自这些包的任何代码来使用引用。这很容易解决这个问题,因为如果没有添加任何代码,就不会加载任何内容(甚至需要在磁盘上加载)。
也就是说,add-wrap -scope newscope将创建一个额外的.wrapdesc文件,通过创建一个独立于原始myProject.wrapdesc的myProject.newscope.wrapdesc文件,将新的依赖项添加到新的作用域。
如果您确实想在每个项目中执行此操作,您是否尝试过使用基于约定的范围界定?类似于:
directory-structure: src\*{scope: Web=WebProjects}*将在包含WebProjects名称的src文件夹中的任何项目分配给作用域。
我知道,到目前为止,我的项目运行良好,尽管您必须重新启动VS,因为它会积极地缓存某些文件,并且不会看到更改。
定制msbuild文件本身还没有经过充分的测试(而且wiki条目在很大程度上是一种设计规范,而不是最终的文档,并不是所有的文档都是以这种方式构建的),所以它可能工作,也可能不起作用。如果你能在http://github.com/openrasta/openwrap/issues上打开一个bug票据,我很乐意看一看
https://stackoverflow.com/questions/8327980
复制相似问题