如何为 xbuild 添加缺少的程序集引用? (Mono/Linux)

How to add a missing assembly reference for xbuild? (Mono/Linux)

我们有一个 C# 项目,在 Visual Studio、Windows 和 TeamCity 中构建得非常好。

我尝试在 Linux 上使用 Mono 的 xbuild:

构建它
MONO_IOMAP=case xbuild BuildAll.sln

构建失败,有 2 个警告和 7 个错误,所有这些都是关于 XmlDiffPatch

警告:

/usr/lib/mono/4.5/Microsoft.Common.targets:  warning : Reference 'XmlDiffPatch, Version=1.0.8.28, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' not resolved

错误:

***REDACTED***: error CS0234: The type or namespace name `XmlDiffPatch' does not exist in the namespace `Microsoft'. Are you missing an assembly reference?

有几个 .cs 个文件

using Microsoft.XmlDiffPatch;

我在 .csproj 文件中有这个:

  <ItemGroup>
    <Reference Include="nunit.framework, Version=2.6.2.12296, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Drawing" />
    <Reference Include="System.Security" />
    <Reference Include="System.Xml" />
    <Reference Include="XmlDiffPatch, Version=1.0.8.28, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </ItemGroup>
  ...
  <ItemGroup>
    <None Include="lib\XmlDiffPatch.dll" />
  </ItemGroup>

我确认文件 lib\XmlDiffPatch.dll 确实存在。

该项目有几个模块(抱歉,我不知道确切的 .NET 说法,我来自 Java/Maven 背景)并且 warnings/errors 仅出现在具有lib 目录。

我需要做什么,才能使用 Mono 在 Linux 上构建此项目? 我最好的猜测是 .csproj 文件丢失了 某些东西 所以他们找不到所需的 .dll.

我查看了类似的问题,但他们基本上说 "just add a reference" 而没有解释如何在 Linux 上做到这一点。我没有 "solutions explorer" 或任何东西。

我应该补充一点,我没有使用 modevelop,这是所有使用 vi.

的控制台和编辑文件

我还想补充一点,对 .csproj 或其他文件的任何更改仍应与 Windows 兼容。

编辑

我不知道它是否有帮助,但我注意到 XmlDiffPatch 所需的版本也是 available on NuGet。我们的 C# 项目目前根本不使用 NuGet,但我当然愿意接受建议 - 只要它只需要在 Linux 上编辑文件并且它会在 [=68= 之后自动在 Visual Studio 中工作] 开发者提取我的提交。

您可以将 HintPath 添加到 .csproj,这样当 MSBuild/xbuild 将程序集引用传递给 csc/mcs 时,将会发现:

<Reference Include="XmlDiffPatch, Version=1.0.8.28, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" >
 <HintPath>lib\XmlDiffPatch.dll</HintPath>
</Reference>

注意:编辑路径,使其相对于 .csproj 所在的位置找到(假设您问题中的 lib 目录)。

https://msdn.microsoft.com/en-us/library/bb629388.aspx

HintPath | Optional string. | Relative or absolute path of the assembly.