.NET和C#中非NuGet第三方DLL的规范处理及存放位置咨询
.NET解决方案中第三方本地DLL的依赖处理最佳实践
现有.NET解决方案结构如下:
folder tree: -> SLN -> Project 1(启动项目) -> Project 2(类库项目)需要在两个项目中引用未发布到NuGet的第三方库
example.dll,以下是符合.NET最佳实践的存放位置和惯用处理方式:
一、DLL的最佳存放位置
按照.NET社区通用最佳实践,不要把DLL放在单个项目目录下,而是在解决方案根目录(SLN文件夹)下创建统一的第三方依赖目录,比如命名为Libs或ThirdParty,还可根据库名/版本进一步细分,方便管理。最终结构如下:
-> SLN -> Libs -> Example -> example.dll -> Project 1(启动项目) -> Project 2(类库项目)
这样做的好处是所有项目都能从统一相对路径引用,便于团队协作同步依赖,也避免重复复制DLL到多个项目目录。
二、引用DLL的惯用方式
针对.NET Framework项目
- 右键目标项目 → 选择「添加引用」→ 浏览到
SLN/Libs/Example/example.dll完成添加 - 选中刚添加的引用,在属性面板把「复制本地」设为
True,编译时DLL会自动复制到项目输出目录,保证运行时能找到 - 记得把
Libs目录加入版本控制系统(比如Git),确保所有团队成员能获取相同依赖文件
针对.NET Core/.NET 5+项目
有两种常用方案,推荐第二种长期维护更方便:
- 直接引用DLL
- 右键项目 → 「添加」→ 「引用」→ 「浏览」选择目标DLL即可
- 也可手动编辑
.csproj文件,添加以下配置:<ItemGroup> <Reference Include="example"> <HintPath>..\Libs\Example\example.dll</HintPath> <Private>True</Private> <!-- 作用等同于.NET Framework的「复制本地」 --> </Reference> </ItemGroup>
- 打包为本地NuGet包(推荐)
把example.dll打包成本地NuGet包,可像管理官方NuGet依赖一样进行版本更新和依赖管理,步骤如下:- 编写
.nuspec配置文件(示例):<?xml version="1.0"?> <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> <metadata> <id>Example.Library</id> <version>1.0.0</version> <authors>ThirdParty</authors> <description>第三方示例类库</description> </metadata> <files> <file src="Libs/Example/example.dll" target="lib/net6.0" /> <!-- 根据项目目标框架调整路径 --> </files> </package> - 使用
nuget pack命令生成.nupkg文件 - 在Visual Studio的NuGet包管理器中添加本地源(指向存放
.nupkg的目录),之后两个项目即可通过NuGet包管理器安装这个本地包
- 编写
内容的提问来源于stack exchange,提问作者Dimitris Karagiannis
相关产品推荐
相关产品推荐

