MSBuild强制执行HintPath验证

mna*_*mov 5 msbuild

当程序集引用有错误的HintPath时,我经常会看到这种情况,这可能导致奇怪的随机故障.

例如,您有错误的HintPath,但您的GAC中有相应的程序集.这意味着项目将在您的计算机上正常编译,但在其他计算机上将失败.

在我的情况下,反之亦然,即使在CI服务器上,GAC中也有一个库,因此通过持续集成无法检测到此问题.

我正在寻找像自定义MSBuild任务这样的东西,它将验证所有HintPath并导致构建失败,如果它们中的任何一个是错误的.

小智 1

如果您希望在提示路径无效的情况下使构建失败,为什么不直接显式引用某些内容呢?这是我公司的 SOP,因为同一库有很多版本。

例如:

    <Reference Include="C:\Path\To\Library\MyReference.dll">
      <Private>False</Private>
    </Reference>
Run Code Online (Sandbox Code Playgroud)

或者,如果您想动态引用基于某个路径的库,您可以设置一些 msbuild 属性,例如指向您的库文件夹的“ExternalLibs”(如果您将库保留在源代码管理等中)。然后,您可以通过命令行(当您调用 msbuild 时)设置该属性,或者为其指定一些默认值,每个用户都可以在其 .user 文件中覆盖该默认值。

    <Reference Include="$(ExternalLibs)\MyReference.dll">
      <Private>False</Private>
    </Reference>
Run Code Online (Sandbox Code Playgroud)

这个解决方案非常灵活。