【发布时间】:2019-10-27 10:30:39
【问题描述】:
我使用 Visual Studio 2017 和默认设置创建了三个 .NET Standard 类库 C# 项目。
项目:
- 主项目
- 时间计划
- 依赖项-> MainProject
- 时钟项目
- 依赖关系 -> TimeProject
他们每个人都必须有自己的输出目录,如:
<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)
输出目录(复制本地 = true):
- \构建\主项目:
- MainProject.dll
- \Build\TimeProject
- MainProject.dll
- TimeProject.dll
- \构建\时钟项目
- MainProject.dll
- TimeProject.dll
- ClockProject.dll
如果我将属性 Copy Local 更改为 false,则直接引用项目中的 DLL 将消失。这样更好,但嵌套引用的 DLL 仍然存在 -> ClockProject 中的 MainProject.dll。
输出目录(复制本地 = false):
- \构建\主项目:
- MainProject.dll
- \Build\TimeProject
- TimeProject.dll
- \构建\时钟项目
- MainProject.dll
- ClockProject.dll
我想防止 ClockProject 在其输出目录中创建 MainProject.dll,因为 MainProject.dll 已存在于 MainProject 的输出目录中。
我有一个庞大的项目,在这种情况下,我的项目文件夹中有很多相同的 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>
【问题讨论】:
-
等等... MainProject 依赖于 TimeProject,而 TimeProject 依赖于 MainProject... 你是不是打错字了?如果不是......那是一个棘手的构建
-
就像 Marc 所说,通常,项目不能相互依赖,因为构建一个需要构建另一个,但是在构建第一个之前,您不能构建另一个......一个讨厌的问题。
-
@MarcGravell 抱歉,这是个错误。 MainProject 没有依赖项
-
“我的问题”到底是什么?在 Visual Studio 中调试时,您将需要
ClockProject文件夹中的所有依赖项。在构建服务器上,将不需要的 DLL 作为工件复制时排除它们是相当简单的。您要解决的方案是什么? -
@NightOwl888 但是属性“复制本地=假”实际上阻止了将依赖项复制到输出文件夹中。这也适用于直接引用的 DLL,但不适用于嵌套的 DLL。
标签: c# .net visual-studio build .net-standard-2.0