我在我从未遇到过问题的解决方案中构建一些 C# 项目时遇到了麻烦。构建失败并显示缺少元数据文件的错误。诊断级别的错误描述和 msbuild 日志输出显示了一些令人惊讶的进展。我遇到这个问题的项目之一叫做WpfControlLibrary. 它引用了解决方案中的以下项目:
Helpers
HunAlmex.Kioszk.Common
HunAlmex.Kioszk.Communication.ImportedServiceContracts
HunAlmex.Kioszk.Data
Run Code Online (Sandbox Code Playgroud)
解决方案文件夹是 "D:\Entegro\TFS\Volánbusz TVM\Bugfixes 2018-06".
构建失败错误如下:
Error CS0006 Metadata file 'D:\Entegro\TFS\Volánbusz TVM\Bugfixes 2018-06\HunAlmex.Kioszk.Data\bin\Debug\WpfControlLibrary.dll' could not be found (in project WpfControlLibrary; file CSC)
Run Code Online (Sandbox Code Playgroud)
因此,当我构建WpfControlLibrary项目时,CSC正在其中一个项目的bin\debug文件夹中寻找以项目命名的 dllWpfControlLibrary项目引用。
构建日志显示上述所有四个项目引用都是这种情况。WpfControlLibrary.dll在bin\debug看似正确地构建这些项目后,构建正在寻找在其文件夹中调用的 dll (这些项目是使用正确命名的 dll 和 pdb 文件构建的)。构建错误可能只包含一个丢失的 dll,因为它在第一个错误时失败。
但是,如果我构建整个解决方案,并查看项目的bin\debug文件夹Helpers,我看到项目构建正确,然后在构建过程中,Helpers.dll文件消失了,并且出现了一个名为WpfControlLibrary.dll(和pdb)的文件。构建最终失败,因为它没有找到Helpers.dll.
WpfControlLibrary项目引用的项目没有引用WpfControlLibrary。
上面的结果是由VS Enterprise 2017 version 15.8.2with产生的msbuild version …
我使用NUnit和NSubstitute进行单元测试.我有以下内容:
public interface IDataProvider
{
void Log(int tvmId, DateTime time, int source, int level, int eventCode, string message);
}
...
var fakeDataProvider = Substitute.For<IDataProvider>();
...
fakeDataProvider.Received().Log(
Arg.Any<int>(),
new DateTime(2000, 1, 1),
0,
0,
0,
null);
Run Code Online (Sandbox Code Playgroud)
fakeDataProvider.Received()抛出AmbiguousArgumentException,并显示无法确定要使用的参数规范的消息.我在SO上找到了以下内容
这是相关的,但我不能在上面的代码中应用它.为什么上面的代码含糊不清?我怎么能指定Received()它应该接受任何参数?