You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

引用CodeAnalysis.CSharp后netstandard2.0库运行时DLL缺失问题求助

解决运行时缺失Microsoft.CodeAnalysis.CSharp程序集的问题

问题根源

你遇到的运行时FileNotFoundException是因为类库项目中Microsoft.CodeAnalysis.CSharp包的PrivateAssets="all"配置导致的。该配置会将包的所有资产(包括运行时DLL)标记为私有,下游项目(如控制台程序)无法自动获取并复制这些依赖文件,因此运行时找不到对应的程序集。

解决方案

方案1:调整类库的PrivateAssets范围

将两个netstandard2.0类库中Microsoft.CodeAnalysis.CSharp的PrivateAssets从all改为analyzers;build,仅保留编译分析器和构建相关资产的私有性,允许运行时依赖传递到下游项目:

修改MyLib.csproj:

<ItemGroup>
    <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.7.0" PrivateAssets="analyzers;build" />
</ItemGroup>

修改MySecondLib.csproj:

<ItemGroup>
    <ProjectReference Include="..\MyLib\MyLib.csproj" />
    <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.7.0" PrivateAssets="analyzers;build" />
</ItemGroup>

重新构建后,控制台项目会自动将该包的运行时DLL复制到输出目录,解决缺失问题。

方案2:控制台项目直接引用该包

如果不想修改类库的配置,可直接在net8.0控制台项目中添加Microsoft.CodeAnalysis.CSharp 4.7.0版本的引用,确保运行时DLL被复制:

修改NetStandardReproduction.csproj:

<ItemGroup>
    <ProjectReference Include="..\MySecondLib\MySecondLib.csproj" />
    <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.7.0" />
</ItemGroup>

方案3:强制复制所有锁定文件依赖

在控制台项目的属性组中添加<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>,强制将所有依赖的程序集复制到输出目录,适用于复杂依赖场景:

修改NetStandardReproduction.csproj:

<PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>

验证

完成上述任一修改后,重新构建整个解决方案并运行控制台程序,即可正常执行,不再抛出程序集缺失异常。

内容的提问来源于stack exchange,提问作者infinitezero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 03:38:10