在我的解决方案中,我有一个项目“commons”,项目有像SpecFlow.CustomPlugin的引用。当我构建项目Com.Org.Commons.dll将生成。但是当我将这个.dll文件引用到另一个项目时(请查看附图solution structure)
具有NUnitPropertyGenerator.cs类的“SFP”也需要引用已包含在commons项目中的SpecFlow.CustomPlugin。
我构建项目公共,Com.Org.Commons.dll将生成。但是当我将Com.Org.Commons.dll包含到SFP项目中时,下面的代码给出了错误,它没有引用Com.Org.Commons.dll。
using TechTalk.SpecFlow.Generator.Plugins;
using TechTalk.SpecFlow.Generator.UnitTestProvider;
using TechTalk.SpecFlow.Infrastructure;
[assembly: GeneratorPlugin(typeof(Com.Org.SFP.CustomNUnitProperties.SpecFlow.NUnitPropertyGenerator))]
namespace Com.Org.SFP.CustomNUnitProperties.SpecFlow
{
public class NUnitPropertyGenerator : IGeneratorPlugin
{
public void Initialize(GeneratorPluginEvents generatorPluginEvents, GeneratorPluginParameters generatorPluginParameters)
{
generatorPluginEvents.CustomizeDependencies += (sender, args) =>
{
args.ObjectContainer.RegisterTypeAs<MasterProvider, IUnitTestGeneratorProvider>();
};
}
}
}
如果我在SFP项目中包含Com.Org.Commons.dll,我认为TechTalk.SpecFlow将被引用,该项目在内部引用SpecFlow.CustomPlugin包。
预期结果应为:
在包含Com.Org.Commons.dll之后,SFP项目应该成功构建,并且应该解决与TechTalk.SpecFlow相关的代码错误。逻辑上,这两个项目都需要SpecFlow.CustomPlugin包,但是当我将详细实现分离到commons项目并考虑公共项目有一个包含在依赖项中的参考包时,我应该能够在引用Com.Org后解决SFP项目中的错误。 SFP项目中的Commons.dll。
请找到.csproj文件内容
commons.csproj(https://gist.github.com/gittadesushil/100df50d4de72d61a9d57aa08c82cada)SFP.csproj(https://gist.github.com/gittadesushil/dda1af31b5351f6ef9c71e44e2ceccda)
如果需要使用SpecFlow.CustomPlugin
DLL中定义的名称空间/类,则需要在所有直接在代码中使用其类的项目中直接添加对该DLL的引用。例如,TechTalk.SpecFlow.Infrastructure
看起来像SpecFlow.CustomPlugin
中的命名空间,用于SFP
。在这种情况下,SFP
需要引用SpecFlow.CustomPlugin
如果您没有直接在TechTalk.SpecFlow.Infrastructure
中使用SFP
,那么您需要做的就是确保CopyLocal
中SpecFlow.CustomPlugins
引用的commons
属性设置为true。
您使用的是普通参考(https://gist.github.com/gittadesushil/dda1af31b5351f6ef9c71e44e2ceccda#file-sfp-csproj-L25),而不是ProjectReference。
这是正确的
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net45</TargetFramework>
<RootNamespace>Com.Org.SFP.CustomNUnitProperties.SpecFlow</RootNamespace>
<AssemblyName>Com.Org.SFP.CustomNUnitProperties.SpecFlow.2.4.SpecFlowPlugin</AssemblyName>
<PackageId>$(AssemblyName)</PackageId>
<Description>$(PackageId)</Description>
<OutputPath>$(SolutionDir)Output\</OutputPath>
<DocumentationFile></DocumentationFile>
<IsTool>true</IsTool>
<BuildOutputTargetFolder>tools\SpecFlowPlugin.2-4</BuildOutputTargetFolder>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DebugType>full</DebugType>
<DebugSymbols>true</DebugSymbols>
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
<WarningLevel>0</WarningLevel>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="Com.Org.Commons" />
</ItemGroup>
</Project>
普通参考不查看依赖图。