2011-11-30 71 views
0

我可能不完全理解范围上的wiki article,所以如果这听起来很愚蠢,请原谅我。
在范围中使用OpenWrap

简介:
我有一个解决方案(ABC.sln)有超过40个项目,并想实现OpenWrap管理软件包。 所以,我没有在解决方案的根文件夹下面的:

o init-wrap -all 

这工作得很好:我现在有一个在解决方案的根文件夹名为SLN.wrapdesc文件。子文件夹中的所有.csproj文件都包含OpenWrap目标行。
然后我proceded不同的包装与添加到解决方案:

o add-wrap -Name xxx 

同样,这工作得很好:我的衣裳文件夹一些包裹,并从拆除旧引用后生成不破项目。

问题:
的包裹中的内容全部要所有的项目,即使对于那些并不需要它。我希望能够指定哪些包装放在哪里,例如AjaxControlToolkit只进入Web项目。

我试了一下
首先,我删除从wrapdesc的AjaxControlToolkit:

o remove-wrap AjaxControlToolkit 

这使得构建破裂(如预期)。然后,我试过如下:
1.尝试与一个范围添加回卷:

o add-wrap -Name AjaxControlToolkit -scope webproject 

这只是把包裹放回包装的文件夹。然后,我将<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说“...你可以在你的默认描述符旁边添加第二个描述符...”

所以现在我被卡住了。有人有主意吗?

回答

1

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

如果不需要从这些组件东西,然后去解决它是通过不使用任何代码这些软件包不使用引用的最简单方法。这很容易解决这个问题,因为如果没有代码被加入,任何东西都不会被加载(甚至不需要在磁盘上)。

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

如果你确实想要这样做每个项目,你有没有尝试过使用基于约定的范围?喜欢的东西:

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

会采取含SRC网络中的名称的文件夹儿童的任何项目,并分配给那些在WebProjects范围。

我知道其中一个对我的项目至今工作良好,但您必须重新启动VS,因为它积极缓存某些文件并且不会看到更改。

自定义msbuild文件本身并没有完全测试(而且wiki条目是一个设计规范而不是最终文档,并不是所有的都是以这种方式构建的),所以它可能会或可能不会工作。高兴地看看,如果你可以打开一个错误票http://github.com/openrasta/openwrap/issues

+0

o add-wrap - 名称AjaxControlToolkit -scope webproject只将wrap添加到wraps文件夹,它不创建额外的.wrapdesc文件。另外,我不想将我的源代码布局更改为全部位于src文件夹中。这可能是什么错吗? – CarllDev

+0

所以首先不应该发生,你使用的是哪个版本的OpenWrap?我刚刚尝试过,并按计划运作。至于版面设计,没有关系,系统很高兴你随时随地都可以放置代码 – SerialSeb