2

我正在研究一种无需更改 cproj 文件即可在 Visual Studio 2010 中构建 MonoTouch 项目的方法。我快到了,但最后一步是在 MonoTouch 项目中具有构建操作“页面”的 *.xib 文件。

在 Visual Studio 2010 bild action Page 将调用 XAML 编译器,因此为了在 VS2010 中构建项目,我需要将构建操作设置为 None。这样做的问题是 .cproj 文件已更改,我需要在构建 MonoTouch 之前将其设置回 Page。

所以我的问题是这样的。使用 Visual Studio 可扩展性模型,是否可以“拦截”某些文件类型并“忽略”它们或更改它们的构建类型?还是 Visual Studio 使用 msbuild 构建所有内容,因此只关心 .cproj 文件中实际写入的内容?

4

1 回答 1

2

我最终使用稍微不同的策略解决了这个问题。您可以在 DTE 对象上侦听不同的生成事件,并在生成之前和之后在 Visual Studio 2010 扩展中运行代码。

_dte.Events.BuildEvents.OnBuildBegin += MakeXibsNone;
_dte.Events.BuildEvents.OnBuildDone += MakeXibsPage;

使用此策略,我可以在构建之前将构建操作更改为 None,然后在构建之后返回到 Page。更改构建类型的代码只是枚举解决方案中的所有项目,以及项目中的所有项目项。它会查找所有扩展名为 .xib 的文件,并使用以下代码更改构建操作:

xib.Properties.Item("ItemType").Value = "Page";
xib.Properties.Item("ItemType").Value = "None";

完整的实现可以在https://github.com/follesoe/VSMonoTouch/blob/master/VSMonoTouch/VSMonoTouchPackage.cs找到。

于 2011-05-15T18:09:41.117 回答