如何在其发布的.dll中包含项目所需的参考

问题描述 投票:1回答:2

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

具有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

c# specflow
2个回答
0
投票

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

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


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>

普通参考不查看依赖图。

© www.soinside.com 2019 - 2024. All rights reserved.