我有一个BizTalk项目,它引用了GAC的dll。当我将这个项目从一台机器移动到另一台机器时,引用被打破了,我需要再次添加这些引用。
有没有办法避免这种情况,因为我有超过50个项目引用了GAC并将被移动到另一台机器。
答案 0 :(得分:1)
是的,您可以通过GAC在新计算机上迁移项目之前的所有引用的程序集来避免此问题。就像他们在当前的机器上一样。这真的没有错。
Visual Studio在引用GAC的程序集时的行为有所不同。我不知道确切的规则是什么,但经常是,即使选择GAC之外的程序集作为参考目标,Visual Studio也会显示对GAC的引用。我说显示一个GAC参考,因为如果你检查项目文件,只列出程序集的字符串名称列表,而不是完整路径。 Visual Studio首先探测GAC,如果找到匹配,则使用它。
这是Visual Studio的所有行为,与BizTalk没有直接关系。
答案 1 :(得分:0)
对于BizTalk项目,这不是一个坏习惯 - BizTalk将从GAC中拉出库(而不是从程序集构建时认为它的位置)。引用本地DLL或解决方案可能会导致非常具有挑战性的场景,其中DLL的本地副本从未获得GAC,并且在单元测试中工作的行为在BizTalk中不起作用。解决方案很简单:GAC在新机器上进行组装。
这里有两种情况 - 你试图引用你自己构建的程序集(比如C#实用程序库),或者你引用的是第三方DLL。
如果是第一个,那么在该C#库的Post Build事件中,在构建之后向GAC添加一些逻辑。例如,
call "$(DevEnvDir)..\Tools\vsvars32.bat"
gacutil /if "$(TargetPath)"
然后,确保首先构建该项目。
否则,如果您正在引用预构建的库,请将相似的逻辑添加到依赖项目的预构建阶段 - 并将该库作为资源包含在您的解决方案中(在源代码管理中)