.NET 运行时
.NET: 基于 .NET 软件框架的 Microsoft 技术。运行时: 运行未编译为机器语言的应用所需的环境。
58 个问题
我有A和B两个项目, A项目是WPF的exe项目,B项目是一个library. 它们都是基于最新的.net 9构建.
我希望在B项目中加入Microsoft.AspNetCore.App的引用,以便做一些asp api server相关的配置,并暴露一个方法给WPF项目使用. WPF在显示主窗口后会启动B项目中api server.
上述的基本框架我已经实现了. 现在遇到管理依赖项的一个问题, 希望可以得到你们的帮助.
在B项目的csproj中,我使用了如下的代码来引入对api server相关的支持.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" Version="9.0.2">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
</Project>
我不希望asp相关的依赖流入到A项目中,导致WPF项目中会看到asp相关的代码(比如能看到Microsoft.AspNetCore命名空间,以及使用asp里相关的类和工具), WPF项目仅仅需要调用自建的函数来启动B项目中的server即可. 所以我使用了PrivateAssets=all来限制依赖项传入wpf项目. 这样做的结果是,WPF项目的编译通过了,但是在运行WPF时,引发了下面的错误.
System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.AspNetCore, Version=9.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. 系统找不到指定的文件。
File name: 'Microsoft.AspNetCore, Version=9.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'
如果,我在WPF项目中加入下述代码, 则可以让WPF成功启动并运行server. 但是这会导致WPF项目中可以见到asp的相关代码,对后续开发造成干扰.
<PackageReference Include="Microsoft.AspNetCore.App" Version="9.0.2">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
因此, 我阅读了MSDN上的文档来学习如何控制依赖项资产,但是测试了各种IncludeAssets,ExcludeAssets,PrivateAssets的各种组合后,并不能达到我的预期目标:
请帮我指出如何写这两个项目的csproj文件,谢谢!