Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
msbuild的隐藏特性_Msbuild_Hidden Features - Fatal编程技术网

msbuild的隐藏特性

msbuild的隐藏特性,msbuild,hidden-features,Msbuild,Hidden Features,本周我对msbuild感兴趣。我正在清理大量极其复杂的构建脚本。深入研究它能做的事情让我感到惊讶——msbuild本身就是.NET编程的一个隐藏特性 按照问题必须有答案的惯例,在几天或一周内,我会将最有用或最酷的隐藏特性标记为已接受 let bestAnswer suprise slick useful = (surprise + slick + 2*useful) 有用的定义:我正在更新现有的msbuild脚本,这些脚本包括:打包(zip文件)网站和实用程序、CC.NET集成、启动测试

本周我对msbuild感兴趣。我正在清理大量极其复杂的构建脚本。深入研究它能做的事情让我感到惊讶——msbuild本身就是.NET编程的一个隐藏特性

按照问题必须有答案的惯例,在几天或一周内,我会将最有用或最酷的隐藏特性标记为已接受

   let bestAnswer suprise slick useful = (surprise + slick + 2*useful)
有用的定义:我正在更新现有的msbuild脚本,这些脚本包括:打包(zip文件)网站和实用程序、CC.NET集成、启动测试(UT+selenium)、构建数据库。我正在添加(新的目标,甚至更有用):部署到VMWare虚拟服务器、链接构建(立即快速构建、排队慢测试)。如果您引用了外部库(如),那么知道如何获取它会很好

我已经发现了一些msbuild惊喜。

  • Hello world使用任务和属性
  • 将msbuild用作极其复杂的服务器产品的安装程序。托管IIS服务器安装程序。和任务写入特定于服务器的配置文件。如果您使用过MSI,您就会知道在安装方面任何东西都比MSI好
  • 对于新手:CSProj和Vbproj文件与msbuild“proj”文件相同。要直接编辑:卸载csproj或vbproj,然后右键单击项目并选择编辑。这比处理笨重的预构建/后构建事件更好、更强大
  • MSBuild随通用.NET安装一起提供。与其他高级工具不同,您可以在完全干净的服务器/桌面上使用它
这里是msbuild Hello World 在我写完之后,我找到了答案


世界

MSBuild有许多不错的特性。我喜欢

递归文件规范

<Files Include="$(src)\**\*.cs" Exclude="$(src)\**\*test.cs" />

批处理和项目元数据

<ItemGroup>
 <F Include="SampleApplication.t">
    <Version>1</Version>
</F>
 <F Include="SampleApplication2.t">
    <Version>1</Version>
</F>
<F Include="SampleApplication3.t">
   <Version>2</Version>
</F>
</ItemGroup>
<Target Name="Build">
<Touch Files="%(F.FullPath)" AlwaysCreate="True" 
        Condition=" '%(F.Version)' > '1' ">
<Output TaskParameter="TouchedFiles" ItemName="CreatedFiles"/>
</Touch>
<Message Text="Created files = @(CreatedFiles)"/>
<Message Text="%(F.Identity) %(F.Version)"/>
</Target>

1.
1.
2.
目标层依赖性分析

<Target Name="Build"
           Inputs="@(MyItems)"
           Outputs="@(MyItems -> '$(MyItems)\%(filename).dll'">

您可以从一个msbuild文件中引用另一个msbuild文件。我们的所有目标,例如用于运行NCover、SourceMonitor、Duplo等的目标,都在一个公共目标文件中。对于每个项目,我们都创建一个msbuild文件,其中包含PropertyGroup和ItemGroup部分,然后是一个包含到公共目标的部分。这保证了我们的所有构建都将运行相同的分析任务集,并节省我们编写脚本的时间。

  • 我发现这包东西真是难以置信 有用。文档组织得很好,很容易找到您需要的信息

  • 他们在为构建文件配置intellisense中有一节,可以找到

  • Attrice有一个难以置信的工具,如果我需要处理构建脚本,我经常使用它。值得一试的是,它有一个调试器,在执行构建脚本时,它会向您显示相关任务,并在运行构建脚本时显示auto和watch变量

  • 将SVN设置为安静,我觉得这大大提高了构建过程的速度。将以下内容添加到MSBuild.Community.Tasks.Subversion.SvnExport将运行生成,而不记录从SVN获取的每个文件

    Arguments=“--force-q”


使用/M命令行参数启用所有可用CPU内核的使用。

这并不是一个真正隐藏的功能,但我认为如果理解它,它会非常强大

有关更多信息,请访问我的相关博客:

赛义德·易卜拉欣·哈希米


我的书:

这应该是一个社区维基吗,因为它更多的是讨论而不是问题?好的。看起来其余的“隐藏功能…”都是社区wiki。递归**是我在框架(CF/Silverlight/.NET/etc)之间共享代码时使用的一个技巧,非常有用。
<Target Name="Build"
           Inputs="@(MyItems)"
           Outputs="@(MyItems -> '$(MyItems)\%(filename).dll'">