起因
WinFormsApp1和WinFormsApp2都是Windows应用程序(WinExe),WinFormsApp2引用了WinFormsApp1。当发布WinFormsApp2时,会提示“未能找到元数据文件”xxxx\xxxx\WinFormsApp1.dll””。如果在项目属性中将WinFormsApp1输出类型改为类库(Library)则WinFormsApp2可以正确发布。缺点是每次发布或者调试WinFormsApp1都需要将输出类型改回WinExe。
方案
编辑WinFormsApp1.csproj,创建BuildAsLibrary属性,并配置OutputType在BuildAsLibrary=true时输出Library,在BuildAsLibrary=false时输出WinExe
WinFormsApp1.csproj1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <BuildAsLibrary>false</BuildAsLibrary> <OutputType Condition="'$(BuildAsLibrary)' == 'true'">Library</OutputType> <OutputType Condition="'$(BuildAsLibrary)' != 'true'">WinExe</OutputType> <TargetFramework>net8.0-windows</TargetFramework> <Nullable>enable</Nullable> <UseWindowsForms>true</UseWindowsForms> <ImplicitUsings>enable</ImplicitUsings> </PropertyGroup>
</Project>
|
编辑WinFormsApp2.csproj,修改WinformsApp1的ProjectReference,设置BuildAsLibrary=true
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>net8.0-windows</TargetFramework> <Nullable>enable</Nullable> <UseWindowsForms>true</UseWindowsForms> <ImplicitUsings>enable</ImplicitUsings> </PropertyGroup>
<ItemGroup> <ProjectReference Include="..\WinFormsApp1\WinFormsApp1.csproj" Properties="BuildAsLibrary=true" /> </ItemGroup>
</Project>
|
至此,WinFormsApp1和WinFormsApp2可以各自发布成对应的WinExe程序!问题解决!~
本文Demo