我们永远都会遇到这个问题,我们有很多解决方案和一个相邻的 /Components/ 文件夹。我们要引用的所有 DLL 都在这个文件夹中。其中一些是我们从源代码构建的,以使用仅存在于组件二进制文件中的特定版本号,但是当不同计算机上的用户从 TFS 获取最新的所有内容并因此具有确切的磁盘结构时,Visual Studio 仍然会更改对安装在 Program Files、GAC 或其他地方的引用。
已尝试手动编辑 proj 文件以包含 HintPath,例如
<Reference Include="Foo, Version=5.5.5.5, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Components\Foo.dll</HintPath>
</Reference>
无济于事。我们如何迫使视觉工作室尊重这条道路?
除了指定“hintPath”之外,将“SpecificVersion”设置为 true 似乎是一个解决方案,因为它“防止 Visual Studio 使用多个目标规则进行程序集解析”。
但是,一旦 foo.dll 不可用(在构建或加载项目时),Visual Studio 魔法就会启动并将程序集目标路径更改为最近的“匹配”程序集。
此后,原始 foo.dll 是否恢复到其位置(在目标路径名处)甚至是否恢复都无关紧要CHANGED! - Visual Studio 仍然引用其新发现的匹配项。这是非常不可取的.
可能的解决方案:
强名称 foo.dll,但 foo.dll 可能仅引用其他强名称程序集(通常是不可取的)。
通过在父应用程序中注册事件来自定义程序集解析。这允许您准确定义在运行时查找目标程序集的位置 - 但这似乎需要花费太多精力才能解决此问题simple问题。
My 解决这个问题 (easily)的方法是将 LOCAL COPY 设置为 FALSE,并向项目添加构建后步骤,该步骤手动将目标程序集复制到目标 bin 文件夹。不好的部分是在构建后步骤和项目的引用配置之间创建的重复(和解耦)量。
请微软- 在“参考”属性页中添加一个选项,该选项将优先考虑hintPath(我们明确指定的)而不是令人惊讶的魔法路径...或者至少,如果两者彼此不同,则抛出警告/错误!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)