Background
最初,我编写了多个代码生成器(需要netStandard2.0),并希望将常见功能提取到一个库中(也需要netStandard2.0).然而,当try 引用库时,我总是得到一个错误,即找不到.dll文件,即使它在那里.我花了3个小时浏览网页和调试,在下面你可以找到一个MRE.我还不确定这是不是我面临的完全相同的问题,因为它抱怨的是微软的DLL,而不是我自己的,但我仍然希望这个修复程序也能修复我的问题.我知道有较新版本的包可用,但我无法让代码生成器与较新版本一起运行,因此我坚持使用此版本.
Question
我怎么才能让它运行起来?
Steps to reproduce:
在VS 17.9.3中,创建一个新的控制台应用程序TargetFrameworknet8.0.
在同一个解决方案中,添加一个新的Library项目TargetFramework netstandard2.0.
MyLib.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.7.0" PrivateAssets="all" />
</ItemGroup>
</Project>
Class1.cs
using Microsoft.CodeAnalysis.CSharp.Syntax;
namespace MyLib
{
public class Class1
{
public int GetNumber()
{
AttributeSyntax node = null;
return 1337;
}
}
}
在同一个解决方案中,添加第二个新的库项目TargetFramework netstandard2.0:
MySecondLib.csproj个
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\MyLib\MyLib.csproj" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.7.0" PrivateAssets="all" />
</ItemGroup>
</Project>
Class2.cs个
using Microsoft.CodeAnalysis.CSharp.Syntax;
using MyLib;
using System;
namespace MySecondLib
{
public class Class2 : Class1
{
public void PrintNumber()
{
AttributeSyntax node = null;
Console.WriteLine(GetNumber());
}
}
}
对于原始控制台应用程序,请使用以下文件: NetStandardReproduction.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\MySecondLib\MySecondLib.csproj" />
</ItemGroup>
</Project>
Program.cs
using MySecondLib;
namespace NetStandardReproduction
{
internal class Program
{
static void Main(string[] args)
{
var obj = new Class2();
obj.PrintNumber();
}
}
}
它可以很好地构建,但当您运行它时,它会失败,并出现UnHandle异常:
System. IO. FileNotFoundException:"无法加载文件或程序集"Microsoft. CodeAnalysis. CSharp,Version = 4.7.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35 ".系统找不到指定的文件."
如果你从两个包中删除引用,并用AttributeSyntax
注释行,它就可以正常工作了.