Visual Studio在生成项目工程前后,有时我们需要做一些特殊的操作,比如:拷贝生成的dll到指定目标下面等。

结合VS可以添加预先生成事件和后期生成事件,采用命令或bat批处理。

1、Visual Studio生成事件命令

  • 预先生成事件命令行,示例:

cd $(ProjectDir)\Resource
BuildResource.bat

  • 后期生成事件命令行,示例:

xcopy /r /y $(TargetPath) $(ProjectDir)..\Bin\
xcopy /r /y $(TargetDir)$(TargetName).dll $(ProjectDir)..\Bin\
xcopy /r /y $(TargetPath) $(ProjectDir)..\Release\
xcopy /r /y $(TargetDir)$(TargetName).dll $(ProjectDir)..\Release\
xcopy /r /y $(ProjectDir)Resource\zh-CN\GoodSoft.ZSM.MS.DAL.dll $(ProjectDir)..\Bin\zh-CN\
xcopy /r /y $(ProjectDir)Resource\en-US\GoodSoft.ZSM.MS.DAL.dll $(ProjectDir)..\Bin\en-US\
xcopy /r /y $(ProjectDir)Resource\GoodSoft.ZSM.MS.DAL.dll $(ProjectDir)..\Bin

  • 对编译出的.dll,.lib,.pdb等文件进行复制copy并更改扩展名为.bytes

copy "$(TargetDir)$(ProjectName).*" "$(SolutionDir)\otherDir\$(ProjectName).*.bytes"

  • xcopy "TargetDir" "SolutionDir"

示例:
xcopy "$(TargetDir)\*.dll" "$(ProjectDir)..\Lib\*.dll" /D /F /K /R /Y
   在VS的项目属性“生成事件”标签页中添加“生成后事件命令行”, copy $(TargetDir) "D:\Program Files\Lib"
这样编译成功后会将生成的文件拷贝到D:\Program Files\Lib
注意:
如果项目无任何改动,“生成”是不会编译的,所以当运行生成后事件选中“生成更新项目输出时”,
 不会被执行,但“重新生成”会无条件的输出,并触发事件

2、部分宏列表宏说明

$(ProjectDir) 项目的目录(定义为驱动器 + 路径);包括尾随反斜杠“\”。

$(ProjectPath) 项目的绝对路径名称(定义为驱动器 + 路径 + 基名称 + 文件扩展名)。

$(ProjectName) 项目的基名称。

$(ProjectFileName) 项目的文件名称(定义为基名称 + 文件扩展名)。

$(ProjectExt) 项目的文件扩展名。 文件扩展名之前包括“.”。

$(SolutionDir) 解决方案的目录(定义为驱动器 + 路径);包括尾随反斜杠“\”。

$(SolutionPath) 解决方案的绝对路径名称(定义为驱动器 + 路径 + 基名称 + 文件扩展名)。

$(SolutionName) 解决方案的基名称。

$(SolutionFileName) 解决方案的文件名称(定义为基名称 + 文件扩展名)。

$(SolutionExt) 解决方案的文件扩展名。 文件扩展名之前包括“.”。

$(TargetDir) 生成的主输出文件的目录(定义为驱动器 + 路径);包括尾随反斜杠 “\”。

$(TargetPath) 生成的主输出文件的绝对路径名称(定义为驱动器 + 路径 + 基名称 + 文件扩展名)。

$(TargetName) 生成的主输出文件的基名称。 $(TargetFileName) 生成的主输出文件的文件名称(定义为基名称 + 文件扩展名)。

$(TargetExt) 生成的主输出文件的文件扩展名。 文件扩展名之前包括“.”。

$(Configuration) 当前项目配置的名称(例如“调试”)。

$(Platform) 当前项目平台的名称(例如“Win32”)。

$(RootNameSpace) 包含应用程序的命名空间(如果存在)。

$(VSInstallDir) 在其中安装了 Visual Studio 的目录。 $(FrameworkDir) 在其中安装了 .NET Framework 的目录。

$(FrameworkVersion) Visual Studio 使用的.NET framework 版本。 结合 $(FrameworkDir),Visual Studio 使用的.NET Framework 版本的完整路径。 $(FrameworkSDKDir) 在其中安装了 .NET Framework 的目录。 .NET Framework 可能已作为 Visual Studio 的一部分安装或单独安装。

$(WebDeployPath) 从 Web 部署根到项目输出位置的相对路径。 返回与 RelativePath 相同的值。

$(WebDeployRoot) <localhost> 的位置的绝对路径。 例如,c:\inetpub\wwwroot。 $(MSBuildProjectName)  项目的基名称。

$(MSBuildProjectExtension) 项目的文件扩展名。它包括文件扩展名前面的“.”。

$(PlatformName) 当前目标平台的名称(例如,“AnyCPU”)。

$(OutputPath) 生成的主输出文件的路径名(定义为驱动器 + 路径 + 基名称 + 文件扩展名)。

$(OutputType) 项目的输出类型。对于数据库项目,此类型为“database”。

$(DBProduct) 目标数据库项目的 Microsoft SQL Server 版本。此结果将为 SQL Server 2010或 SQL Server 2016。

$(TargetDatabase) 目标数据库的名称。

$(TargetConnectionString) 用于连接到目标数据库当前驻留(或将驻留)的服务器的连接字符串。

Visual Studio 生成事件命令的更多相关文章

  1. Visual Studio 生成事件这件小事

    在上一篇<Visual Studio 调试技巧>中,介绍了一些VS常用的调试操作,今天,聊一聊VS当中一个不太常见,但有时又有妙用的操作——VS生成事件. 一.什么是VS生成事件 简单来说 ...

  2. Visual studio 生成事件的使用 、xcopy 实现 dll 复制操作、

    IF NOT "$(ConfigurationName)"=="publish" exit /B 0if not exist $(TargetPath)publ ...

  3. Visual studio中后期生成事件命令使用

    在做项目是总要把发布后的一些dll拷贝的根网站的bin目录下,为了避免每次都需要手动拷贝可以在 项目的生成事件中写入bat命令,下面的命令只在项目使用的发布配置时执行拷贝, (在生成->配置管理 ...

  4. 使用VS的生成事件命令行指令将生成的exe,dll文件复制到指定文件夹中

    VS预生成事件命令行 和 生成后事件命令行 宏说明 $(ConfigurationName)            当前项目配置的名称(例如,“Debug|Any CPU”). $(OutDir)   ...

  5. C# “预先生成事件命令行”和“后期生成事件命令行”

    概述 Visual studio 项目允许在项目属性生成事件一栏中指定预先生成和后期生成事件来实现项目生成与部署的自动化. 实例1: 我自己写了一个调试工具,该工具处于一边开发一边使用过程中.实际工作 ...

  6. 项目属性-->生成事件-->后期生成事件命令行

    以开源记牌器https://github.com/Epix37/Hearthstone-Deck-Tracker 为例,Hearthstone Deck Tracker项目中的后期生成事件命令行: i ...

  7. VS2010-使用“预先生成事件命令行”和“后期生成事件命令行”功能

    原文:VS2010-使用"预先生成事件命令行"和"后期生成事件命令行"功能 xcopy /r /y $(TargetPath) $(ProjectDir)..\ ...

  8. Visual Studio 生成项目时脚本执行

    项目属性 - 生成事件 项目生成前:预先生成事件命令行: 项目生成后:后期生成事件命令行:例:copy $(ProjectDir)Reference\sms_cfg.ini $(TargetDir) ...

  9. visual studio使用dos命令在生成项目时复制文件到指定目录

    本人使用软件:vs2015 拷贝“项目1”的 bin目录 下, 项目配置的名称(“Release”,“Debug”)目录下,所有内容到“项目2”输出目录(存在直接覆盖): xcopy $(Soluti ...

随机推荐

  1. 打造TypeScript的Visual Studio Code开发环境

    打造TypeScript的Visual Studio Code开发环境 本文转自:https://zhuanlan.zhihu.com/p/21611724 作者: 2gua TypeScript是由 ...

  2. CS Coder学习asp.net5个月的最大感悟:从http的角度重新认识asp.net(二)——我理解的ajax(二)

    啊哈,时隔两个月,才开始写上一篇文章的后续,实在是惭愧.主要是年尾公司又来活了,忙得团团转,而且这段时间在自学mvc.我在上文中,提到过我对mvc框架的初步印象是:相比webform,算是回归了bs本 ...

  3. [源码]Literacy 快速反射读写对象属性,字段

    Literacy 说明 Literacy使用IL指令生成方法委托,性能方面,在调用次数达到一定量的时候比反射高很多 当然,用IL指令生成一个方法也是有时间消耗的,所以在只使用一次或少数几次的情况,不但 ...

  4. ELK 安装笔记

    logstash -noverify -javaagent:E:\svn\other\nn\jrebel6.0.0+crack\jrebel6.0.0-crack\jrebel.jar -Drebel ...

  5. 06.移动先行之谁主沉浮----我的代码我来写(Xaml的优势)

    如果移动方向有任何问题请参考===> 异常处理汇总-移动系列(点) 前面几节课,我们都是在前台创建对象,进行一些设置,那么我们为什么不用传统的方法来编程呢? 我们今天来试试你就明了了~~ 打开M ...

  6. c 线程(平行世界)

    我们已经知道如何使用进程来做一些事情了,然而 它并不是在什么地方都是最适合的. 我们看看进程的缺点是什么: 线程隆重登场 1. 如何创建线程 创建线程可以使用多种线程库,在此我们使用最流行的一种:PO ...

  7. Basic Tutorials of Redis(4) -Set

    This post will introduce you to some usages of Set in Redis.The Set is a unordered set,it means that ...

  8. Java注解

    Java注解其实是代码里的特殊标记,使用其他工具可以对其进行处理.注解是一种元数据,起到了描述.配置的作用,生成文档,所有的注解都隐式地扩展自java.lang.annotation.Annotati ...

  9. HTTP各状态码解释

      状态码 含义 100 客户端应当继续发送请求.这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝.客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应.服务器必 ...

  10. 运算符.png