如何在版本的.dll中包含项目所需的参考

时间:2019-03-25 14:03:46

标签: c# specflow

在我的解决方案中,我有一个项目“ commons”,该项目具有诸如SpecFlow.CustomPlugin之类的引用。当我构建项目时,将生成Com.Org.Commons.dll。 但是,当我将此.dll文件引用到另一个项目时(请查看附件图片solution structureenter image description here

具有NUnitPropertyGenerator.cs类的“ SFP”还需要引用CommonFlow项目中已经包含的SpecFlow.CustomPlugin。

我构建了项目Commons,将会生成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>();
            };
        }
    }
}

我认为,如果我在内部引用SpecFlow.CustomPlugin包的SFP项目中包含Com.Org.Commons.dll,则会引用TechTalk.SpecFlow。

预期结果应该是:

SFP项目应在包含Com.Org.Commons.dll之后成功构建,并应解决与TechTalk.SpecFlow相关的代码错误。从逻辑上讲,这两个项目都需要SpecFlow.CustomPlugin程序包,但由于我将详细信息实现隔离到commons项目,并且考虑到common项目的依赖项中包含参考包,因此我应该能够在引用Com.Org之后解决SFP项目中的错误。 SFP项目中的Commons.dll。

请找到.csproj文件内容

commons.csproj(https://gist.github.com/gittadesushil/100df50d4de72d61a9d57aa08c82cada) SFP.csproj(https://gist.github.com/gittadesushil/dda1af31b5351f6ef9c71e44e2ceccda

2 个答案:

答案 0 :(得分:0)

如果需要使用在SpecFlow.CustomPlugin DLL中定义的名称空间/类,则需要在所有直接在代码中使用其类的项目中直接添加对该DLL的引用。例如,TechTalk.SpecFlow.Infrastructure看起来像SpecFlow.CustomPlugin中使用的SFP中的命名空间。在这种情况下,SFP需要引用SpecFlow.CustomPlugin

如果您没有直接在TechTalk.SpecFlow.Infrastructure中使用SFP,那么您要做的就是确保{{1}中的CopyLocal引用的SpecFlow.CustomPlugins属性}}设置为true。

答案 1 :(得分:0)

您使用的是普通参考(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>

普通引用不会查看依赖关系图。