TFS 2010 msbuild覆盖输出目录中引用库的不同版本
本文关键字:引用 版本 msbuild 2010 覆盖 输出 TFS | 更新日期: 2023-09-27 18:09:10
我正在使用TFS 2010构建Web项目。该项目包含Silverlight客户端和。net/c#服务器端。这两个(客户端和服务器端)都引用了一个第三方库,我们有Silverlight和。net版本,但两个版本使用相同的名称。问题是带有outdir属性的msbuild将所有库放在输出目录中的一个平面层次结构中,因此一个库覆盖另一个库。
我知道一个解决方案是修改构建模板而不指定outdir,但这会给构建模板的其他部分带来问题(我在单元测试中遇到了问题,我读到有人在把输出放到_publishhedwebsites时遇到了问题)。
另一个解决方法是重命名该库/库,这样名称就不会冲突。但是,如果有很多这样的库,这将不是解决方案。
我想找到一些干净的解决方案。你知道什么优雅的解决方法吗?
根据微软的说法,有(至少)三种引用程序集的方法:
- 在GAC 中安装程序集
- 在应用程序配置中指定程序集
- 或使用AssemblyResolve事件
这里没有GAC选项,因为您会遇到相同的问题(相同的名称)。
使用AssemblyResolve事件,然后使用Assembly。LoadFrom可能是这样做的一种方式,但更容易的是imho…
…采用上述第二种方法:在应用程序配置中指定程序集。这里你可以像这样编辑App.config:
<configuration>
<runtime>
<assemblyBinding xmlns=”urn:schemas-microsoft-com:asm.v1″>
<probing privatePath=”bin;Silverlight;ParentFolder'SubFolder;”/>
</assemblyBinding>
</runtime>
</configuration>
,应用程序将在指定目录中搜索程序集。
因此,您可以创建特定的文件夹(可能是"NET"answers"Silverlight"或类似的文件夹),将各自的程序集复制到该文件夹中,并在上面描述的适当文件夹中探测程序集。
考虑到在应用程序配置中没有指定引用时,应用程序将查看与引用程序集相同的文件夹或到具有引用程序集名称的文件夹中,您也可以简单地创建与各自应用程序同名的2个文件夹(如果它们被称为"Client.exe"answers"Server.exe",则称"Client"answers"Server")并将适当的程序集复制到该文件夹中。在这种情况下,甚至不需要更改应用程序配置文件。