我已经使用Visual Studio 2017和默认设置创建了三个.NET Standard类库C#项目。
项目:
其中每个必须具有自己的输出目录,例如:
<OutputPath>C:\Projects\DataControl\Build\MainProject</OutputPath>
<OutputPath>C:\Projects\DataControl\Build\TimeProject</OutputPath>
<OutputPath>C:\Projects\DataControl\Build\ClockProject</OutputPath>
项目DLL文件放置在输出目录中,但是问题在于,引用的项目DLL也放置在输出目录中(TimeProject.dll和MainProject.dll)
输出目录(Copy Local = true):
如果我将属性Copy Local
更改为false,则直接引用的项目中的DLL消失。那就更好了,但是嵌套引用的DLL仍然是-> ClockProject中的MainProject.dll。
输出目录(本地复制= false):
我想防止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>
答案 0 :(得分:5)
我找到了以下解决方案:
ClockProject需要MainProject和TimeProject。
如果我仅在ClockProject中引用TimeProject,则它可以工作(因为TimeProject引用MainProject),但是MainProject.dll被复制到我不需要的ClockProject Output文件夹中。
但是,如果我在ClockProject,Main-和TimeProject中都引用了两个项目,并且都将它们都设置为CopyLocal = false,那么只有ClockProject.dll将被复制到ClockProject的Output文件夹中。
答案 1 :(得分:2)
对于这样的项目,我进入每个项目属性并设置一个Common Output目录。这样,所有项目都将其构建文件转储到一个目录中。
由于这是不可能的,因此在您的引用中选择MainProject.dll引用,查看属性并将“将本地复制”设置为False。
答案 2 :(得分:1)
您设计的方式错误,这就是为什么版本冲突的原因。
您需要重新设计解决方案,以便项目具有具有正确层次结构的依赖树:
主项目<-时间项目<-时钟项目
要解决您的解决方案,请执行以下操作:
在每个步骤中,您可能都需要重构。每个项目都引用Main是一个不行。您可以引用小型的模块化封装库,并在解决方案中为MainProject建立依赖关系树。