调试3dsmax插件,有一个避免每次修改插件代码都需要重启3dsmax的方法,就是将导出的核心代码写在一个独立的DLL中,然后在插件代码需要导出时LoadLibrary这个DLL,导出之后再FreeLibrary。这样的好处是,通过同时开启2个vs,一个是插件,另一个是DLL,当需要修改代码时,只需要重新编译DLL即可,除非有致命错误导致3dsmax崩溃。

但是从Visual Studio 2010起,VS会一直lock住相关文件,例如pdb之类的。这样将导致DLL代码在重新编译时,会出现LNK1201错误,从而无法更新DLL的pdb文件。我花了好几个小时,终于找到一个解决办法,为了让后来者不再浪费时间,下面将说明实现方法。

打开DLL的工程,在Pre-Build Event中加入以下代码:

del "$(OutDir)$(TargetName).pdb.locked.*" /q
if exist "$(OutDir)$(TargetName).pdb" move "$(OutDir)$(TargetName).pdb" "$(OutDir)$(TargetName).pdb.locked.%random%"

先跳过第一句,第二句的意思是,判断是否存在工程对应的pdf文件,如果存在,则将其重命名为"*.locked.随机数",因为只是move,所以并不影响VS的lock状态,这时重新生成pdb的操作也将成功。再回头看第一句,每次编译前,都将尝试删除所有"临时改名后的文件",打扫战场。

因为在插件运行的时段,DLL会有多次需要修改,所以每次都需要将工程的pdf文件更名为不同的新名称,所以通过%random%来确保改名操作成功。

最后,我们又回到了过去那段快乐的时光,有限的生命终于不再因为无数次重启3dsmax而浪费在无谓的等待中。

解决Visual Studio 2010/2012在调试时lock文件的方法的更多相关文章

  1. 解决Visual Studio 2010/2012的RC4011 warnings

    如果在vc10/11工程的rc文件中有以下任意一行代码: #include <winuser.h> #include <richedit.h> 那么vc将会给出一对警告: C: ...

  2. Visual Studio 2010无法启动调试

    现象:Visual Studio 2010点击调试或者按F5.Visual Studio 2010没有什么反应,但又不报错. 而点击运行不调试(Ctrl+F5)却没有问题. 解决的方法:打开项目属性, ...

  3. Visual Studio 不生成.vshost.exe和.pdb文件的方法【转】

    Visual Studio 不生成.vshost.exe和.pdb文件的方法[转] 使用Visual Studio编译工程时,默认设置下,即使选择了「Release」时也会生成扩展名为「.vshost ...

  4. 在Visual Studio 2010/2012中 找不到创建WebService的项目模板

    参考文章: http://blog.sina.com.cn/s/blog_6d545999010152wb.html 在 Visual Studio 2010 或者2012的新建 Web 应用程序或者 ...

  5. 解决Visual Studio 2010 “无法导入以下密钥文件” 错误

    错误原文: "错误 1 无法导入以下密钥文件: SamplePlugin.pfx.该密钥文件可能受密码保护.若要更正此问题,请尝试再次导入证书,或手动将证书安装到具有以下密钥容器名称的强名称 ...

  6. Visual Studio 2010初学者的调试指南:Mastering Debugging in Visual Studio 2010 - A Beginner's Guide

    Introduction In the software development life cycle, testing and defect fixing take more time than a ...

  7. 更改Visual Studio 2010/2012/2008的主题设置

    一.更改主题: 主题网站:http://studiostyl.es/ Visual Studio 2010发布也已经有一段时间了,不过安装后默认的白底的主题长时间看代码可能会感觉眼睛酸痛,况且时间长了 ...

  8. 解决Visual Studio 2010新建工程时出现『1>LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt』错误

    VS2010在经历一些更新后,建立Win32 Console Project时会出"error LNK1123" 错误.   解决方案为: 第一步:将:项目|项目属性|配置属性|清 ...

  9. 解决Visual Studio 2010新建工程时出现『1>LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt』错误

      VS2010在经历一些更新后,建立Win32 Console Project时会出"error LNK1123" 错误. 解决方案为: 第一步:将:项目|项目属性|配置属性|清 ...

随机推荐

  1. perl小记

    perl是一种运行式脚本,所以在debug的时候,多用print,在后台看有没有输出相关的结果,来判断相应的错误. 部分perl正则表达式: $gene =~/^LOC/  以“LOC”开头的字符串 ...

  2. php中or的含义

    or其实是Php中的短路或 经常看到这样的语句: $file = fopen($filename, r) or die("抱歉,无法打开: $filename"); or在这里是这 ...

  3. Spring 4 官方文档学习(十一)Web MVC 框架之约定优于配置

    当返回一个ModelAndView时,可以使用其addObject(Object obj)方法,此时的约定是: An x.y.User instance added will have the nam ...

  4. ASP.NET访问网络映射盘&实现文件上传读取功能

    最近在改Web的时候,遇到一个问题,要跨机器访问共享文件夹,以实现文件正常上传下载功能. 要实现该功能,可以采用HTTP的方式,也可以使用网络映射磁盘的方式,今天主要给大家分享一下使用网络映射磁盘的方 ...

  5. DataTable与List互换

    public static class List2DataTable { #region "Convert Generic List to DataTable" /// <s ...

  6. 再详细的介绍一下Unity5的AssetBundle

    之前曾经写了一篇博客介绍Unity5的AssetBundle,结果似乎很受关注.不过似乎很多人看了之后都不懂,主要是因为不太明白AssetBundle是什么,它的依赖关系和结构是什么的,就直接想拿代码 ...

  7. Windows 8.1 应用再出发 (WinJS) - 几种新增控件(1)

    Windows 8.1 和 WinJS 引入了以下新控件和功能,分别是:AppBarCommand.BackButton.Hub.ItemContainer.NavBar.Repeater.WebVi ...

  8. 知识总结提炼-AP模块

    http://www.cnblogs.com/bruce_zhao/p/3809686.html 应付模块业务操作流程 供应商管理 供应商概述 在您使用 Oracle Purchasing 之前,需要 ...

  9. 【Android开发】 第一课 环境搭建教程

    Windows 开发环境部署: Android Studio 中文社区:http://www.android-studio.org/ 本教程将分为五个步骤来完成Android开发环境的部署. 第一步: ...

  10. 【基础知识】.Net基础加强07 天

    一. 自定义泛型 1. 泛型的目的:提高代码的复用性. 2. T:一般叫做“类型参数”,把数据类型作为参数传递 .一般用T类表示或者以大写T开头的比如:TKey,TValue.TOutput.TRes ...