MAUI项目调试正常但发布失败,引用VB类库找不到dll
问题:MAUI项目引用VB类库发布时找不到依赖DLL
项目配置
Project1.csproj(C# MAUI项目)
<PropertyGroup> <TargetFrameworks>net7.0-maccatalyst;net7.0-ios;net7.0-android</TargetFrameworks> <TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net7.0-windows10.0.19041.0</TargetFrameworks> <OutputType>Exe</OutputType> <UseMaui>true</UseMaui> <SingleProject>true</SingleProject> <ImplicitUsings>enable</ImplicitUsings> </PropertyGroup> <ItemGroup> <ProjectReference Include="..\Smanager\Smanager.vbproj" /> </ItemGroup>
Project2.csproj(Visual Basic类库)
<PropertyGroup> <RootNamespace>Smanager</RootNamespace> <TargetFramework>net7.0</TargetFramework> </PropertyGroup>
问题现象
调试及本地Release模式运行正常,两个项目断点均可触发,但执行发布操作时报错,输出如下:
1>1 of 2 projects are up-to-date for restore. 1>Cannot resolve Assembly or Windows Metadata file 'C:\Users\...\bin\Release\net7.0\Smanager.dll' 1>Metadata file 'C:\Users\...\bin\Release\net7.0\Smanager.dll' could not be found ========== Publish: 0 succeeded, 1 failed, 0 skipped ========== ========== Elapsed 00:18.234 ========== ========== Package: 0 succeeded, 1 failed ===========
原因分析
- 目标框架不匹配:VB类库仅编译为
net7.0单一框架,而MAUI项目是多目标框架项目,发布时部分平台编译流程无法找到对应框架的类库输出。 - 构建依赖顺序异常:发布阶段MAUI项目的构建优先级高于VB类库,导致MAUI编译时依赖的DLL尚未生成。
- 多平台发布路径不匹配:不同平台的编译输出路径存在差异,MAUI项目无法在统一路径下找到VB类库的DLL文件。
解决办法
1. 对齐类库与MAUI项目的目标框架
修改VB类库的TargetFramework为多目标框架,覆盖MAUI项目的所有目标平台,确保每个平台编译时都能找到对应版本的类库:
<PropertyGroup> <RootNamespace>Smanager</RootNamespace> <TargetFrameworks>net7.0;net7.0-android;net7.0-ios;net7.0-maccatalyst;net7.0-windows10.0.19041.0</TargetFrameworks> </PropertyGroup>
也可根据实际发布需求,仅保留需要的目标框架(如只发布Windows和Android则删除iOS、maccatalyst相关项)。
2. 强制发布时优先构建依赖项目
在MAUI项目的ProjectReference中添加构建依赖配置,确保发布流程先编译VB类库:
<ItemGroup> <ProjectReference Include="..\Smanager\Smanager.vbproj"> <BuildProjectReferences>true</BuildProjectReferences> <ReferenceOutputAssembly>true</ReferenceOutputAssembly> </ProjectReference> </ItemGroup>
3. 指定单一目标平台发布
若无需发布所有平台,在Visual Studio发布向导中选择具体的目标平台(如Windows或Android),避免多平台编译带来的依赖匹配问题。
4. 统一输出路径
显式指定VB类库的输出路径与MAUI项目的依赖查找路径一致,修改VB类库的项目文件:
<PropertyGroup> <RootNamespace>Smanager</RootNamespace> <TargetFramework>net7.0</TargetFramework> <OutputPath>$(SolutionDir)bin\Release\net7.0\</OutputPath> </PropertyGroup>
内容的提问来源于stack exchange,提问作者10101
相关产品推荐
相关产品推荐

