在上一篇《Visual Studio 调试技巧》中,介绍了一些VS常用的调试操作,今天,聊一聊VS当中一个不太常见,但有时又有妙用的操作——VS生成事件。

一、什么是VS生成事件

简单来说,VS生成事件就是在编译项目的过程中发生的一些事件。根据事件发生的时机,允许自定义一些操作。

VS生成事件可以在项目上右键,选择属性菜单后看到。VS生成事件分为以下两大部分:

1. 生成前事件命令行,可以指定在项目编译之前执行的一些命令行操作。

通过点击编辑预先生成按钮,可以编辑生成前事件命令行。其中宏按钮允许插入一些预定义变量,可以代表文件路径。

2. 生成后事件命令行,可以指定在项目编译之后执行的一些命令行操作。

运行后生成事件可以指定运行生成后事件的发生条件。

简单了解VS生成事件之后,再以真实案例说明下VS生成事件的运用。

二、VS生成事件应用

1.使用xcopy拷贝dll

在实际的开发过程中,有时需要使用C#调用C++ dll。然而,C++ dll 分为x86和x64版本。C#程序运行时,需要依据操作系统的类型加载合适版本的dll。这个时候,一个解决方案就是,将公有位置上x86和x64版本的C++ dll ,通过VS生成事件,使用xcopy命令拷贝到程序生成目录的x86和x64文件夹下面,C#程序启动时,自动从x86或x64文件夹下拷贝合适版本的C++ dll。具体命令行实例如下:

 /// <summary>
/// author LightSmaile
/// </summary>
private void CheckBlogPosition()
{
if(thisBlogPostion != "cnblogs")
{
Console.WriteLine("this blog has been crawled!");
}
}
2.自动修改程序安装包图标

VS可以制作程序安装包,默认生成setup.exe以及setup.msi。由于setup.exe的图标不能在制作程序安装包的项目当中指定,所以萌生了借助VS生成事件,调用第三方工具替换setup.exe的图标的想法。

经过一番搜索,发现 ResourceHacker 既可以支持界面操作,也可以支持命令行操作。仔细阅读相关说明后,得出如下事件命令行:

需要注意的是,程序安装包似乎没有VS编译事件,可以新建一个空项目,并填写事件命令行内容。通过右键,将制作安装包项目设置为新建空项目的项目依赖项。

三、写在最后

以上只是VS事件的简单介绍,可以依据项目实际需求,具体调整事件命令行内容。原则上来讲,cmd命令行支持的内容,VS事件命令行也会支持。

特别声明:本文版权归本人以及博客园所有,禁止任何未授权个人以及网站部分或全部使用。

Visual Studio 生成事件这件小事的更多相关文章

  1. Visual Studio 生成事件命令

    Visual Studio在生成项目工程前后,有时我们需要做一些特殊的操作,比如:拷贝生成的dll到指定目标下面等. 结合VS可以添加预先生成事件和后期生成事件,采用命令或bat批处理. 1.Visu ...

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

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

  3. Visual studio 生成后事件说明

      在“配置属性->生成事件->生成后事件”属性页中的“命令行”编辑框中输入如下命令: copy "$(ProjectDir)$(IntDir)\$(ProjectName).t ...

  4. 使用 Visual Studio 生成通用的 XAML 应用程序 (Windows Phone 和 Windows 通用程序)

    在Build会议上,我们发布了新的版本---Windows Phone 8.1. Windows 8.1 平台.作为开发人员,这意味着您现在可以生成 XAML 和 HTML 的通用程序,并通过分享大量 ...

  5. Visual Studio 生成DLL文件

    新建一个项目,在菜单栏中选择“项目”/“**属性”选项,该页面中将“输出类型”下拉列表中的选项选择为“类库”,然后重新生成一下该项目,或者在“Visual Studio 2008命令提示”中输入以下命 ...

  6. 探索Visual Studio生成的.vs文件夹内部结构和作用

    这里直接先将我摸索出的结果贴出来,文章后面会一一详细说明和分析:.vs目录是用来存储当前用户在解决方案中的工作配置,具体包括VS关闭前最后的窗口布局.最后打开的选项卡/操作记录/文件文档.某些自定义配 ...

  7. Visual Studio生成webservice代理类

    首先点击 vs菜单栏->工具 ,选择 外部工具, 在弹出的窗口中点击 添加, 然后在“标题”行中输入"WSDL生成代理类", "命令"行中输入" ...

  8. 探究Visual Studio生成的.vs文件夹内部结构和作用

    https://shiyousan.com/post/636441130259624698 在某个契机的引发下,对VS解决方案中自动生成的.vs文件夹产生了兴趣,以前总对这个文件夹不怎么上心,最近正好 ...

  9. 为Visual Studio安装其他控件(cognex 康耐视)时报错:未能加载文件或程序集 EnvDTE, Version=8.0.0.0

    解决办法: 在VS的路径下(一般为:C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Private ...

随机推荐

  1. Python网络爬虫实战(二)数据解析

    上一篇说完了如何爬取一个网页,以及爬取中可能遇到的几个问题.那么接下来我们就需要对已经爬取下来的网页进行解析,从中提取出我们想要的数据. 根据爬取下来的数据,我们需要写不同的解析方式,最常见的一般都是 ...

  2. Linux防火墙管理

    1.临时关闭防火墙 systemctl stop firewalld 2.查看防火墙运行状态 firewall-cmd --state 3.开启防火墙 systemctl start firewall ...

  3. (附源码gitHub下载地址)spring boot -jta-atomikos分布式事务

    应用场景:双数据源,就是某些项目会涉及到两个数据源或者两个以上的数据源,这个多数据源的项目一般是数据同步,也就是把数据从另一个系统中,保存到另一个系统,两边的 数据库又不一样,比如一个Mysql.一个 ...

  4. [3]尝试用Unity3d制作一个王者荣耀(持续更新)->选择英雄-(中)

    如果已经看过本章节:目录传送门:这是目录鸭~ 上节内容写了Actor管理器,那么这一节让我们先创建一个角色.(此章节开始加速...) 1.制作角色展示AssetBundle: 提取农药某个展示模型(S ...

  5. Day 14 查找文件 find

    find 查找方式 1.按照名称进行查找 [root@oldboyedu ~]# find ./ -name "*eth0" 2.按照名称查找(不区分大小写) [root@oldb ...

  6. (七十)c#Winform自定义控件-饼状图

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...

  7. 使用git管理github上的代码

    第一次接触git是使用git来提交自己的github的代码,在new repository之后,github会给出一些操作示例. 示例如下: …or create a new repository o ...

  8. 安全性测试:OWASP ZAP 2.8 使用指南(三):ZAP代理设置

    ZAP本地代理设置 如前文所言,ZAP的工作机制,是通过“中间代理”的形式实现. ZAP的代理设置可以从菜单中的:工具 - 选项 - Local Proxies加载. 在这里可以设置ZAP用来接受接入 ...

  9. RDDs之combineByKey()

    combineByKey(crateCombiner,mergeValue,mergeCombiners,partitioner) 最常用的基于Key的聚合函数,返回的类型可以和输入的类型不一样 许多 ...

  10. Mac配置环境变量path

    查看当前配置的path有哪些: 1. echo $PATH  当前所有的 2. cat /etc/paths  这个文件是操作系统自带的 mac系统环境变量的加载顺序(优先级): /etc/profi ...