解决使用MSBuild编译项目没有拷贝间接引用的dll问题
2017-01-24 11:29
537 查看
/p:Configuration:Release并不会拷贝log4net.
Analysis:从最表面入手,没有拷贝就让他拷贝。查看MSDN,得知有Copy task可以用,实际上msbuild所有的步骤都定义在csproj文件和MSBuild .Targets 文件里边了。找到最简单暴力的方法,拷贝。
1.先确定从哪里拷贝什么,很显然我们需要的是A项目bin/(debug|release)目录下的dll文件,有个疑问,这个dll版本会是最新的吗?答:一定是,因为使用MSBuild编译时所有间接引用的项目都会根据指令重新生成。
直接在当前夏木的csproj文件的Project配置节下边添加一个<ItemGroup>配置节,设置我们需要查找的文件。$(Configuration)是指当前编译时使用/p传进来的参数,msbuild会自动替换掉,如使用MSBuild b.csproj /p:Configuration:Release并就会替换成Release。
2.什么时候如何拷贝。这个也很简单。在csproj文件末尾添加Name属性为AfterBuild的Target 配置节。因为这个项目时webApplication项目,所以直接拷贝到bin目录即可。
这个方法方便可靠吗?
肯定不方便,建立每个可执行项目(exe,webApplication)都需要修改一下配置文件。此方法还没有在website上验证。
也不太可靠,如果出现下边的情况会是怎样呢?
这种复制具有不确定性,即大家都不确定最终是哪个版本覆盖哪个版本。实际上这个在我之前写代码的时候就发现了,一直不知道如何处理,两个版本改动不大还好说,如果改动大了呢?我当时的做法是使用Dll
Redirection,把低版本重定向高版本。但是这完全是自作自受的做法,在自己可控范围内为什么不用同一个版本的dll呢,如果这样不就可靠了吗?其实有可能还是不可靠,因为还有很多种情况没有检验过,这个方法只限于解决当前问题。常常见到别人和我从同一个出发点开始思考,往往提出了更全面,更前瞻性的解决方案时就觉得很没劲、很自责。想来和经验与性格都有关,有待改进!
不可靠你还拿出来?
完全是记录自己解决问题的思路。其实这种思路并不正确,我总是喜欢做一些模棱两可的事情,表面上看似解决问题了,实际则不然,一直再改进,但起色不大,求指点。
这个是最优方法吗?
不是,如果你打开MSBuild .Targets 文件就发现有很多流程和这个问题相关,很多地方都能解决这个问题,DUDU老大找到一篇资料《resolving
binary references in msbuild》就提出了至少2种方法,显示一个简单暴力的方法,接着给出了一个比较perfect的解决方案。
参考:
Copy 任务 http://msdn.microsoft.com/zh-cn/library/3e54c37h(v=VS.100).aspx
MSBuild .Targets 文件http://msdn.microsoft.com/zh-cn/library/ms164312.aspx
ResolveNativeReference 任务 http://msdn.microsoft.com/zh-cn/library/ms164302.aspx
MSbuild http://msdn.microsoft.com/en-us/library/wea2sca5(v=VS.90).aspx
好文要顶 关注我 收藏该文
相关文章推荐
- 解决使用MSBuild编译项目没有拷贝间接引用的dll问题
- 解决使用MSBuild编译项目没有拷贝间接引用的dll问题
- 解决应用MSBuild编译项目没有拷贝间接引用的dll题目
- [Boost]_[使用预编译头文件解决引用boost后项目编译很慢的问题]
- [Boost]_[使用预编译头文件解决引用boost后项目编译很慢的问题]
- 解决 eclipse 在编译 打包 部署 maven 项目的时候 WEB-INF/lib 为空 没有 jar的问题
- C#项目引用完全相同dll文件的问题解决方法(反射)
- VC6.0编译DLL,使用VS2010调用问题及解决方法
- 解决使用libpq时提示一系列SSL相关函数没有定义导致编译失败的问题
- 使用VIM开发软件项目 - (16) vim编译中遇到的问题及解决方法
- C#项目引用完全相同dll文件的问题解决方法
- C#项目引用完全相同dll文件的问题解决方法(反射)
- 使用VS开发Qt项目时编译速度慢的问题解决
- 遭遇 VS 的 无法调试引用的类库项目(DLL)问题(生成下面的模块时,启用了优化或没有调试信息)
- 类库间无项目引用时,在编译时拷贝DLL
- 使用iMatrix平台做项目时出现数据库中没有生成对应的表问题如何解决?
- (已解决)拷贝dll文件到另一个项目,编译不报错,运行报错“未能加载文件或程序集...”
- 解决使用Maven项目,无法正确编译的问题
- vs 项目编译运行报错:无法启动此程序,因为计算机中丢失 osg130-osgDB.dll。尝试重新安装该程序以解决此问题