13

我想创建一个 Visual Studio(我使用的是 VSTS 2008)项目,它只进行文件复制工作,更详细地说,我将向这个项目添加一些文件,并将这个项目复制文件(包含在这个项目中)复制到某个目标位置我建立项目。

任何想法如何在 VSTS 中做到这一点?

顺便说一句:我听说使用 proj 文件可以完成此类任务,但我没有找到任何适合初学者的简单易学示例。:-)

提前谢谢,乔治

4

5 回答 5

13

您可以在 Visual Studio 中添加构建后步骤:

  • 打开项目属性(这适用​​于 C# 项目,我想这也适用于 VB.NET)。
  • 选择构建事件选项卡
  • 例如,您可以在那里添加构建后事件命令

    copy $(ProjectDir)\bin\* SOME_OTHER_FOLDER\*

$(ProjectDir) 是一个宏,还有一些可用的,当您编辑命令时会显示它们。

然后,如果您查看相应的项目文件(XYZ.csproj 或 XYZ.vbproj),您可以看到在文件底部添加了一个属性组,例如:

  <PropertyGroup>
      <PostBuildEvent>copy $(ProjectDir)\bin\* SOME_OTHER_FOLDER\*</PostBuildEvent>
  </PropertyGroup>

这就是直接编辑 MSBuild 文件时的操作方式。请注意,您无需启动 Visual Studio 即可构建和复制文件,只需将项目文件传递给 msbuild.exe。

于 2009-05-04T13:40:20.130 回答
4

如前所述,Visual Studio . xx proj 文件实际上是 MSBuild 文件。因此,您可以在其中做任何 MSBuild 允许他们做的事情。我已经使用它们来定制我的构建过程。就您而言,您正在寻找的是Copy Task。您可以将其添加到AfterBuild目标中。

于 2009-05-04T13:55:21.217 回答
0

这个问题的其他答案往往假设您没有使用 VisualStudio,而是直接使用 MSBuild,或者有一个现有项目,您可以为其添加自定义构建步骤或构建事件(我发现构建事件类型的解决方案容易出错,因为它们不会总是在需要复制文件时复制文件)。

如果您想要一个仅进行复制的 VisualStudio 项目,您可以使用带有Makefile项目的库存 VisualStudio 来执行此操作。

稍微错误命名的Makefile项目可以做任何你可以从命令行做的事情。显然这意味着您可以创建一个只复制文件的 Makefile 项目。在 Makefile 项目的PropertiesConfiguration PropertiesNMake部分中是 Build、Rebuild 和 Clean 操作的字段。这些可以用普通的旧批处理文件命令填充。在每次构建时,VisualStudio 将从适当的字段创建一个临时批处理文件并使用 cmd 执行它。警告您将在 64 位机器上获得 32 位 cmd 解释器,因此您需要使用神奇的sysnative如果您想访问 64 位 Windows 命令或 DLL,则该目录(我不确定这是否记录在任何地方,因此可能并非总是如此 - 您的批处理脚本应该能够抵抗 cmd 更改的位性。

示例批处理代码需要 64 位系统文件,但事先不知道什么 cmd 或 OS(32 位或 64 位)将运行该代码:

if /i "%programfiles%"=="%programfiles(x86)%" if /i not "%programfiles%"=="%programw6432%" (
    REM 32 bit cmd on 64-bit computer
    REM Use the 'sysnative' fake directory to get to 64-bit system32 files
) else (
    if /i not "%programfiles%"=="%programfiles(x86)%" if /i "%programfiles%"=="%programw6432%" (
        REM 64 bit cmd on 64-bit computer
        REM Use the 'system32' directory to get to 64-bit system32 files
    ) else (
        echo "Cannot do 64-bit on 32-bit computer"
        copy foobar
    )
)

(上面的“复制 foobar”行将失败,导致构建失败。)

请注意,VisualStudio(和 MSBuild)将始终运行 Makefile 项目 - 它不会检查输出文件上的时间戳,而是将该作业添加到它期望的其他构建工具(nmake、cmake、make、ant、maven、 ETC。)。因为,在这种情况下,只有一个简单的复制命令,而不是一些程序检查是否执行复制,所以复制发生在每个构建中。

VisualStudio总是运行 makefile 项目也意味着每次按F5调试项目时,VisualStudio 都会用一个措辞不当的弹出对话框(如果你没有告诉它不要)来告诉你你的项目已经结束了日期,您必须重新构建它。如果您告诉 VisualStudio 不显示对话框,它只会在运行可执行文件之前执行复制而不询问。

于 2012-10-11T16:40:50.267 回答
0

C#/VB.NET 项目文件是MSBuild脚本。MSBuild 可以做任何你需要的事情......

于 2009-05-04T13:33:23.160 回答
0

在 Visual Studio 2010 中,您使用自定义生成工具

例如,此规则将“faq.txt”复制到输出目录。

<ItemGroup>
  <CustomBuild Include="faq.txt">
    <Message>Copying readme...</Message>
    <Command>copy %(Identity) $(OutDir)%(Identity)</Command>
    <Outputs>$(OutDir)%(Identity)</Outputs>
  </CustomBuild>
</ItemGroup>
于 2010-10-28T19:56:52.733 回答