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. 我们公司的ASP.NET 笔试题,你觉得难度如何

    本套试题共8个题,主要考察C#面向对象基础,SQL和ASP.NET MVC基础知识. 第1-3题会使用到一个枚举类,其定义如下: public enum QuestionType { Text = , ...

  2. Tomcat服务无法启动的问题

    去年下半年公司就决定投入人力物力"跟风"做大数据方向的研究并应用到后续项目中,于是乎,我们也得熟悉下Java才行了. 先弄个JavaEE的开发环境再说吧.装JDK.JRE,其实JD ...

  3. ABP框架 - 数据过滤

    文档目录 本节内容: 简介 预定义过滤 ISoftDelete 何时可用? IMustHaveTenant 何时可用? IMayHaveTenant 何时可用? 禁用过滤 关于using声明 关于多租 ...

  4. 菜鸟学Struts2——HelloWorld

    写在前面 自从工作后就过上了只有一个月记忆的生活,太健忘,很多学过的东西因为用得少便忘记了,第二次学习struts,为了以后便于查阅,开始自己的博客之旅.Struts的学习还是从Hello World ...

  5. C++ std::deque

    std::deque template < class T, class Alloc = allocator > class deque; Double ended queue deque ...

  6. php排序算法

    <?php//冒泡排序(数组排序) function bubble_sort($array){ $count = count($array); if ($count <= 0) retur ...

  7. python 三元运算

    C:\Users\Administrator>pythonPython 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.190 ...

  8. Git : SSH 协议服务器

    SSH 协议用于为 Git 提供远程读写操作,是远程写操作的标准服务. SSH协议语法格式 对于拥有 shell 登录权限的用户账号,可以用下面的语法访问 Git 版本库: 语法 1 : ssh:// ...

  9. JavaScript中函数函数的定义与变量的声明<基础知识一>

    1.JavaScript中函数的三种构造方式 a.function createFun(){ } b.var createFun=function (){ } c.var createFun=new ...

  10. 8.SVM用于多分类

    从前面SVM学习中可以看出来,SVM是一种典型的两类分类器.而现实中要解决的问题,往往是多类的问题.如何由两类分类器得到多类分类器,就是一个值得研究的问题. 以文本分类为例,现成的方法有很多,其中一劳 ...