登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
安全
›
如何在 DotNet 中使用类似 golang 的 vendor 的编译模式 ...
如何在 DotNet 中使用类似 golang 的 vendor 的编译模式
[ 复制链接 ]
乳杂丫
昨天 19:15
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!
cnblogs博客
zhihu
Github
公众号:一本正经的瞎扯
一个项目中,存在部分库是公司内的,且需要配置个人的用户名和密码连接到 NuGet 站点,才能下载这些库。
而有时候需要直接把一个仓库拉到某个环境上进行编译,且不希望把带了密码的 NuGet.Config 文件提交到代码仓库中。
能不能把公司内的库放到类似 golang 的 vendor 目录下?然后编译机器拉到仓库后就能直接编译,而不再依赖公司的 NuGet 站点了。
下面是我的做法:
下载所有依赖库
在项目根目录中定义一个配置完整的 NuGet.Config 文件,取名为: NuGet.Config.for.download
NuGet.Config.for.download
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
</packageSources>
<packageSourceMapping>
<packageSource key="Internal">
<package pattern="MyCompany.*" />
</packageSource>
<packageSource key="nuget.org">
<package pattern="*" />
</packageSource>
</packageSourceMapping>
<packageSourceCredentials>
<Internal>
</Internal>
</packageSourceCredentials>
</configuration>
复制代码
这个文件用于第一次使用时下载库,这个文件不必提交到仓库。
下载所有依赖库
mkdir -p ./vendor/public/
dotnet restore --configfile ./NuGet.Config.for.download --packages ./vendor/public/
复制代码
指定配置文件,把所有依赖项下载到 /vendor/public/ 目录。
下载好后,把公司内部的库移动到另一个目录:
rm -fdr ./vendor/private/ ; mkdir -p ./vendor/private/ && \
mv ./vendor/public/MyCompany.* ./vendor/private/
复制代码
编译
用于编译的 NuGet.Config 配置
新增一个专门用于 vendor 模式的 NuGet.Config 配置文件,取名为:NuGet.Config.vendor
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
</packageSources>
<packageSourceMapping>
<packageSource key="Internal">
<package pattern="MyCompany.*" />
</packageSource>
<packageSource key="nuget.org">
<package pattern="*" />
</packageSource>
</packageSourceMapping>
</configuration>
复制代码
基于 vendor 目录的 restore
dotnet restore --configfile ./NuGet.Config.vendor -r linux-x64
复制代码
编译
dotnet publish MyProj.csproj \
--no-restore \
-c Debug -r linux-x64 \
-o ./build/linux/amd64/
复制代码
最关键的参数是 --no-restore
docker 中编译
docker run --rm \
--platform linux/amd64 \
-v "./":/src \
-w /src/ \
mcr.microsoft.com/dotnet/sdk:8.0 \
bash -c ' \
dotnet restore --configfile ./NuGet.Config.vendor -r linux-x64 && \
dotnet publish MyProj.csproj \
--no-restore \
-c Debug -r linux-x64 \
-p:PublishAot=false \
-p:PublishSingleFile=false \
-p:IncludeNativeLibrariesForSelfExtract=true \
-p:EnableCompressionInSingleFile=true \
-p:GenerateDocumentationFile=false \
-p:StripSymbols=false \
-p:DebugType=portable \
-p:DebugSymbols=true \
-p:EmbedUntrackedSources=true \
-p:EmbedAllSources=true \
-p:ContinuousIntegrationBuild=true \
-p:Optimize=false \
-o /src/build/linux/amd64/ \
'
复制代码
提交到 git
.gitignore 文件中增加一些配置:
NuGet.Config.for.download # 用于下载的文件,不提交到仓库,里面有密码
/vendor/public/ # public 文件太多了,不提交到仓库
!/vendor/private/ # 说明这个目录一定要提交
!/vendor/private/**/*nupkg # .nupkg 类型的文件一定要提交
复制代码
好了,在别的环境 git clone 后,使用上述提到的编译命令行就可以编译了。
希望对你有用, Have fun.
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
何在
DotNet
使用
类似
golang
相关帖子
dotnet DirectX 通过可等待交换链降低输入渲染延迟
使用语义化版本管理工程:告别版本混乱
ai使用分享
如何使用 LiteLLM 网关代理统一管理你的大模型
SQLAlchemy中使用UPSERT
【项目实践】使用GNS3模拟三层架构中小型企业组网
【翻译】MAUI 的.NET 11预览版:使用内联C#表达式简化XAML
ZoomIt的使用与快捷键
使用 pkgutil 实现动态插件系统
使用pyside6编写简单的串口上位机
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
dotnet DirectX 通过可等待交换链降低输入渲染延迟
0
843
俞瑛瑶
2026-02-26
业界
使用语义化版本管理工程:告别版本混乱
1
521
石娅凉
2026-02-27
业界
ai使用分享
1
936
任静柔
2026-02-27
业界
如何使用 LiteLLM 网关代理统一管理你的大模型
0
690
捡嫌
2026-02-27
业界
SQLAlchemy中使用UPSERT
0
264
侧胥咽
2026-02-28
安全
【项目实践】使用GNS3模拟三层架构中小型企业组网
0
9
嫁吱裨
2026-02-28
业界
【翻译】MAUI 的.NET 11预览版:使用内联C#表达式简化XAML
1
566
全跺俚
2026-03-01
业界
ZoomIt的使用与快捷键
0
751
坟菊
2026-03-02
业界
使用 pkgutil 实现动态插件系统
0
251
晚能
2026-03-02
安全
使用pyside6编写简单的串口上位机
0
253
蚣澡
2026-03-02
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
业界
科技
签约作者
程序园优秀签约作者
发帖
乳杂丫
昨天 19:15
关注
0
粉丝关注
16
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991125
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
宋子
9888
6
韶又彤
9910
7
闰咄阅
9993
8
刎唇
9995
9
蓬森莉
9873
10
遗憩
10006
查看更多
今日好文热榜
556
虚拟线程深度解析:轻量并发编程的未来趋势
772
程序员必读的AI Prompt最佳实践
981
为什么我拖了一个多月才开始使用OpenClaw?
407
【节点】[FresnelEquation节点]原理解析与
929
ManimCE v0.20.1 发布:LaTeX 渲染修复与动
274
安心存取,轻松分享!一款基于 CloudFlare
490
收藏! 2026最强开源AI编程工具清单:从代码
975
非统一内存访问架构NUMA的是是非非
324
C#/.NET/.NET Core技术前沿周刊 | 第 67 期
378
Oracle数据库被勒索加密一键open工具–OraF
233
嵌入式通用通信帧协议设计
575
打破同源枷锁:深入理解 postMessage 跨域
5
NVIDIA GPU 集合通信库 NCCL 基本概念简述
463
凸优化数学基础笔记(九):最优化问题的要
650
深入浅出:RS-232 和 RS-485 串口通信的区
940
高光谱成像(一)高光谱图像
542
3分钟搞懂深度学习AI:毁掉AI的广播机制陷
245
AI Agent框架探秘:拆解 OpenHands(10)--
427
数据库服务存储引擎
562
当测试自动化率达到80%,测试工程师还剩下