引用的.NET Standard项目中的多个DLL

Sta*_*mpy 6 .net c# build visual-studio .net-standard-2.0

我已经使用Visual Studio 2017和默认设置创建了三个.NET Standard类库C#项目。

项目:

  • 主项目
  • 时间项目
    • 依赖关系-> MainProject
  • ClockProject
    • 依赖-> TimeProject

它们每个都必须具有自己的输出目录,例如:

<OutputPath>C:\Projects\DataControl\Build\MainProject</OutputPath>
<OutputPath>C:\Projects\DataControl\Build\TimeProject</OutputPath> 
<OutputPath>C:\Projects\DataControl\Build\ClockProject</OutputPath>
Run Code Online (Sandbox Code Playgroud)

项目DLL文件放置在输出目录中,但问题是引用的项目DLL也放置在输出目录中(TimeProject.dll和MainProject.dll)

输出目录(Copy Local = true):

  • \ Build \ MainProject:
    • MainProject.dll
  • \ Build \ TimeProject
    • MainProject.dll
    • TimeProject.dll
  • \ Build \ ClockProject
    • MainProject.dll
    • TimeProject.dll
    • ClockProject.dll

如果将属性更改Copy Local为false,则直接引用的项目中的DLL消失。那就更好了,但是嵌套引用的DLL仍然保留-> ClockProject中的MainProject.dll。

输出目录(Copy Local = false):

  • \ Build \ MainProject:
    • MainProject.dll
  • \ Build \ TimeProject
    • TimeProject.dll
  • \ Build \ ClockProject
    • MainProject.dll
    • ClockProject.dll

我要防止ClockProject在其输出目录中创建MainProject.dll,因为MainProject.dll已存在于MainProject的输出目录中。

我的项目很大,在这种情况下,我的项目文件夹中有很多相同的DLL。但是,在程序启动期间,逻辑还会在子文件夹中搜索DLL,然后找到同一项目的多个DLL,这会导致版本冲突。通常,我想保持这种逻辑,因此我正在寻找一种仅生成项目DLL而不生成引用的DLL的解决方案。

最后,我的csproj文件。其他两个项目文件看起来相似。

ClockProject.csproj:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <OutputPath>C:\Projects\DataControl\Build\ClockProject</OutputPath>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\TimeProject\TimeProject.csproj">
      <Private>false</Private>
    </ProjectReference>
  </ItemGroup>

</Project>
Run Code Online (Sandbox Code Playgroud)

Sta*_*mpy 5

我发现以下解决方案:

ClockProject需要MainProject和TimeProject。

如果我仅在ClockProject中引用TimeProject,则它可以工作(因为TimeProject引用MainProject),但是MainProject.dll被复制到我不需要的ClockProject Output文件夹中。

但是,如果我在ClockProject,Main-和TimeProject中都引用了两个项目,并将两者都设置为CopyLocal = false,则只有ClockProject.dll将被复制到ClockProject的Output文件夹中。