我们有一个C#项目,可以在Windows和TeamCity中的Visual Studio中很好地构建。
我尝试使用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背景),警告/错误只发生在具有lib
目录的模块中
我需要做什么才能使这个项目在使用Mono的Linux上构建?
我最好的猜测是.csproj
个文件缺少某些内容,因此无法找到所需的.dll
。
我看了类似的问题,但他们基本上说“只是添加一个参考”而没有解释如何在Linux上这样做。我没有“解决方案探险家”或其他任何东西。
我应该补充一点,我没有使用monodevelop,这是所有带vi
的控制台和编辑文件。
我还想补充一点,对.csproj
或其他文件的任何更改仍应与Windows兼容。
修改
我不知道它是否有用,但我注意到所需的XmlDiffPatch
版本也是available on NuGet。我们的C#项目目前根本不使用NuGet,但我当然愿意接受建议 - 只要它只需要在Linux上编辑文件,它就会在Windows开发人员提交后自动在Visual Studio中工作。
答案 0 :(得分:6)
您可以向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 | 可选字符串。 |装配的相对或绝对路径。