我希望创建一个 Visual Studio 项目(我使用的是 VSTS 2008),它可以简单地进行文件复制工作。更具体地说,我会向这个项目添加一些文件,当我构建该项目时,这个项目将把包含在项目中的文件复制到某个目标位置。
有什么思路可以在 VSTS 中实现这个功能吗?
顺便说一句:我听说使用 proj 文件可以完成这样的任务,但我没有找到任何适合初学者学习的好样例。:-)
谢谢提前, George
我希望创建一个 Visual Studio 项目(我使用的是 VSTS 2008),它可以简单地进行文件复制工作。更具体地说,我会向这个项目添加一些文件,当我构建该项目时,这个项目将把包含在项目中的文件复制到某个目标位置。
有什么思路可以在 VSTS 中实现这个功能吗?
顺便说一句:我听说使用 proj 文件可以完成这样的任务,但我没有找到任何适合初学者学习的好样例。:-)
谢谢提前, George
你可以在Visual Studio中添加一个构建后步骤:
在那里可以添加构建后事件命令,例如
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即可。
如前所述,Visual Studio .xxproj 文件实际上是 MSBuild 文件。因此,您可以在其中执行 MSBuild 允许的任何操作。我已经使用它们来自定义我的构建过程。在您的情况下,您要寻找的是 Copy Task。您可以将其添加到 AfterBuild 目标中。
<ItemGroup>
<CustomBuild Include="faq.txt">
<Message>Copying readme...</Message>
<Command>copy %(Identity) $(OutDir)%(Identity)</Command>
<Outputs>$(OutDir)%(Identity)</Outputs>
</CustomBuild>
</ItemGroup>
对于一个不那么强大但更本地化的解决方案:
在Visual Studio中,打开项目“配置属性” ->“高级”,并将“复制内容到输出目录”设置为“是”。假设您要复制的文件是解决方案的一部分,请打开要复制的文件的属性,并将“内容”设置为“是”。请记得在发布和调试配置中都这样做。
现在,您的文件将在编译时复制到输出目录中。适用于复制配置或图形等资产文件。
(我使用的是Visual Studio 2022,早期版本可能无法使用)
C#/VB.NET 项目文件是 MSBuild 脚本。MSBuild 可以满足你的所有需求...
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
)
)
(上面的“copy foobar”行将失败,导致构建失败。)
请注意,VisualStudio(和MSBuild)将始终运行Makefile项目 - 它不会检查输出文件的时间戳,而是将该工作推迟到它期望的其他构建工具(nmake、cmake、make、ant、maven等)。由于在这种情况下只有一个简单的复制命令,而没有一些程序检查是否执行复制,因此每次构建都会发生复制。
VisualStudio始终运行makefile项目也意味着每次按F5调试项目时,VisualStudio都会用措辞不当的弹出对话框(如果您没有告诉它不要这样做)来烦扰您,告诉您您的项目已过期,必须再次构建它。如果您告诉VisualStudio不显示对话框,它将在运行可执行文件之前执行复制而不询问。