当 MSBuild 发生时,如果 sharepoint 项目(来自该项目的 WSP)针对 GAC,我希望它失败。
IE。就在打包之前,我想检查该包所针对的 feature.xml 或任何其他 .xml 文件。
有哪些可能的方法来实现这一目标?我没有任何经验。在自定义 MSBuild 任务中。这是可行的吗?
当 MSBuild 发生时,如果 sharepoint 项目(来自该项目的 WSP)针对 GAC,我希望它失败。
IE。就在打包之前,我想检查该包所针对的 feature.xml 或任何其他 .xml 文件。
有哪些可能的方法来实现这一目标?我没有任何经验。在自定义 MSBuild 任务中。这是可行的吗?
我的建议如下:
创建一个程序,接受项目的路径作为参数,并针对您自己定义的错误对其进行分析。当您的程序发现并出错时,它只会以下列格式之一向控制台输出错误:
error: <message>
<filename>: error: <message>
<filename> (<line>): error: <message>
<filename> (<line>,<column>): error: <message>
您可以将“错误”一词替换为“警告”。当您使用这种特定格式时,当您使用 VS 进行编译时,错误(或警告)将出现在 Visual Studios 错误列表中。传递文件名和行将启用“双击跳转到错误”功能。
接下来,您打开项目文件并添加 AfterBuild 目标。在此目标中,您使用 Run 命令调用您自己的应用程序并传递您的项目路径。确保将“ContinueOnError”属性设置为 false。
现在,每当您构建自定义目标时,都会触发。您的自定义目标将调用您的应用程序,该应用程序将分析您的项目。当您的应用程序输出错误时,MSBuild 将拾取它并取消继续并将构建标记为失败。
您也可以为此使用 MSBuild 任务,但我建议您不要这样做。msbuild 任务将加载到 Visual Studio 的 AppDomain,锁定程序集。当您想要替换它时(例如,因为您更改了分析规则),您首先必须退出 Visual Studio 以解锁文件。当使用源代码控制系统时,这真的很烦人,人们只想更新当前文件而不担心程序集是否被锁定。
我通过分析我们的一个项目作为构建的一部分,以及为我们自己的 Web 服务创建代理客户端作为构建的一部分,非常成功地运行了这个原则。