1

我正在使用约 100 个项目(混合 C# Winforms、VC++ Winforms 和非托管 C)的解决方案。

我有一个名为“DatafiltersControls”(C#)的项目,它引用了一个名为“DatafiltersTypes”(VC++)的项目,下面显示的是特定参考的xml条目。

<ProjectReference Include="..\DatafiltersTypes\DatafiltersTypes.vcxproj">
  <Project>{360679FF-815C-4B39-8E5A-62C0D2A6DB31}</Project>
  <Name>DatafiltersTypes</Name>
  <Private>False</Private>
</ProjectReference>

现在,问题是:“设计师只会在某些情况下加载我的控件”。经过大量研究后,我将其分解为我的开发环境以及我打开解决方案的方式。我的构建环境是从 dos 窗口内部创建的,它将替换一个新驱动器 (P:),映射到一个目录。

创建我的目录后:

  • 如果我的提示是“p:\common”作为当前工作目录,并键入 common.sln,那么所有设计师都可以正常工作。这是我最初设置该引用时的当前工作目录。
  • 如果我从资源管理器中双击 common.sln,然后尝试打开“复杂”表单,则会收到以下错误:无法加载文件或程序集“DatafiltersTypes,版本=1.0.1.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。该系统找不到指定的文件
  • 如果我的提示有“p:\”或任何其他目录作为 CWD,然后调用“p:\common\common.sln”,则设计器会中断复杂的表单(同上)

我相信具体问题是这样的:我的参考是相对添加的,基于 Visual Studio 打开时的 CWD。从那时起,设计者会打破任何“复杂”的形式,因为搜索路径是基于 cwd 的。

如果需要,我可以定义“复杂”,我有确切的情况。我理想的解决方案是允许我的引用基于驱动器的根(无论如何,我公司的开发人员已经有一个约束)。例如,而不是

....\build\output\datafilterstypes.dll,我想要 \build\output\datafilterstypes.dll 作为我的参考。

重要的是要注意:当我加载 devenv 时,无论我的工作目录如何,一切都编译得很好,它只是设计器。

提前致谢。

编辑:补充一下,如果

4

1 回答 1

1

问题是设计者无法加载不纯的 C++ dll。将任何直接或间接将 C++ dll 转换为纯的项目。

于 2014-12-22T14:45:27.657 回答