发布ASP.NET5项目时关联控制台项目依赖缺失如何解决
解决方案
出现该问题的核心原因是ASP.NET项目默认的依赖裁剪逻辑,引用其他可执行项目时只会拷贝exe文件本身,不会同步拷贝被引用项目的私有依赖,而普通控制台项目没有该限制,所以你测试的ProjectC可以正常运行。可以通过以下三种方式解决:
方法1:修改ProjectB项目文件配置
直接编辑ProjectB的.csproj文件,在根节点下的<PropertyGroup>中添加如下配置:
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
该配置会强制项目在构建/发布时拷贝所有NuGet依赖到输出目录,不会进行裁剪,发布后ProjectA的所有依赖就会完整保留。
方法2:自定义发布脚本
如果不想修改项目配置,可以通过命令行分别发布两个项目到同一个输出目录:
- 创建统一的发布输出目录,比如命名为
publish - 先发布ProjectA到该目录:
dotnet publish ./ProjectA/ProjectA.csproj -c Release -o ./publish - 再发布ProjectB到相同目录,添加参数避免覆盖已存在的公共文件:
dotnet publish ./ProjectB/ProjectB.csproj -c Release -o ./publish --no-overwrite
发布完成后两个程序的依赖都完整保存在同一目录,可分别正常运行。
方法3:修改Visual Studio发布配置文件
如果你使用Visual Studio的图形化发布功能,可以直接修改对应的.pubxml发布配置文件:
- 在发布界面点击「配置」旁的编辑按钮,选择「管理配置文件」,右键点击你使用的配置文件选择「打开包含的文件夹」
- 编辑打开的
.pubxml文件,在<PropertyGroup>节点下添加如下配置:
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
- 保存文件后重新发布即可。
内容的提问来源于stack exchange,提问作者kalleguld
相关产品推荐
相关产品推荐

