0

我可能不完全理解关于范围界定的wiki 文章,如果这听起来很愚蠢,请原谅我。

简介:
我有一个包含 40 多个项目的解决方案 (ABC.sln),并且正在尝试实施 OpenWrap 以进行包管理。因此,我在解决方案的根文件夹中执行了以下操作:

o init-wrap -all

效果很好:我现在在解决方案的根文件夹中有一个名为 SLN.wrapdesc 的文件。子文件夹中的所有 .csproj 文件都包含 OpenWrap 目标行。
然后我继续将不同的包装添加到解决方案中:

o add-wrap -Name xxx

同样,这很好用:我在 wraps 文件夹中有一些包装,并且在从项目中删除旧引用后构建不会中断。

问题:
包装的所有内容都将用于所有项目,即使对于那些不需要它的项目。我希望能够指定哪些包装去哪里,例如 AjaxControlToolkit 只进入 web 项目。

我尝试
了什么 首先,我从 wrapdesc 中删除了 AjaxControlToolkit:

o remove-wrap AjaxControlToolkit

这会导致构建中断(如预期的那样)。然后我尝试了以下方法:
1.尝试使用范围添加回绕:

o add-wrap -Name AjaxControlToolkit -scope webproject

这只是将 wrap 放回 wraps 文件夹中。然后我添加<OpenWrap-Scope>customscope</OpenWrap-Scope>到项目文件中,但构建仍然中断。
2. 尝试手动将名为 ABC.webproject.wrapdesc 的文件添加到根文件夹。当我尝试打开解决方案时,这会导致以下错误:

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 说“……您可以在默认描述符旁边添加第二个描述符……”

所以现在我被困住了。有人有想法么?

4

1 回答 1

1

per-msbuild 文件确实不是管理依赖项的推荐方法。每个项目都这样做并不是 OpenWrap 背后的设计理念,因此该系统并未针对这些场景进行优化。

如果您不需要这些程序集中的某些东西,那么解决它的最简单方法是不使用这些包中的任何代码而不使用引用。这很容易解决问题,因为如果没有添加任何代码,则不会加载任何内容(甚至不需要在磁盘上)。

也就是说,add-wrap -scope newscope将创建一个额外的 .wrapdesc 文件,通过创建一个独立于原始 myProject.wrapdesc 的 myProject.newscope.wrapdesc 文件,将新依赖项添加到新范围。

如果您确实想针对每个项目执行此操作,您是否尝试过使用基于约定的范围?就像是:

directory-structure: src\*{scope: Web=WebProjects}*

将在名称中包含 Web 的 src 的子文件夹中获取任何项目,并将其分配给 WebProjects 范围。

我知道到目前为止,我的项目运行良好,尽管您必须重新启动 VS,因为它会积极缓存某些文件并且不会看到更改。

自定义 msbuild 文件本身并没有经过全面测试(并且 wiki 条目在很大程度上是一个设计规范,而不是最终文档,并非所有都是这样构建的),因此它可能会或可能不会起作用。如果您可以在http://github.com/openrasta/openwrap/issues上打开错误票,很高兴看看

于 2011-11-30T15:21:41.887 回答