在 .NET Standard 2.0 程序集中,我有一个写入事件日志的函数:
public static void WriteEventLog(string Source, string Message, EventLogEntryType EvType)
枚举
EventLogEntryType
在 nuget System.Diagnostics.EventLog
8.0.0 中引用。程序集构建时没有错误。
但是当我引用 .NET 4.8 上的另一个类库中的程序集并尝试调用此函数时,我收到此构建错误:
错误CS0012
类型“EventLogEntryType”是在未引用的程序集中定义的。您必须添加对程序集“System.Diagnostics.EventLog,Version=8.0.0.0,Culture=neutral,PublicKeyToken=cc7b13ffcd2ddd51”的引用
所以我尝试在 .NET 4.8 库中引用
System.Diagnostics.EventLog
8.0.0,但没有帮助。我仍然遇到同样的错误。
我做错了什么吗?我该如何解决这个问题?
看起来编译器使用的是程序集
EventLogEntryType
(版本 4.0.0)中的 System
,而不是 EventLogEntryType
8.0.0 中的 System.Diagnostics.EventLog
。
根据 csproj 的要求:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.0</TargetFrameworks>
<OutputType>Library</OutputType>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<RootNamespace>xx.yyy.zzz</RootNamespace>
<DebugSymbols>true</DebugSymbols>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
<DebugType>full</DebugType>
<Optimize>false</Optimize>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' != 'Debug'">
<DebugType>embedded</DebugType>
<Optimize>true</Optimize>
</PropertyGroup>
<ItemGroup>
<Reference Include="System.configuration" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Logging.EventLog" Version="8.0.0" />
<PackageReference Include="Microsoft.IO.RecyclableMemoryStream" Version="3.0.1" />
<PackageReference Include="OpenXMLSDK-MOT" Version="2.7.1" />
<PackageReference Include="ncalc" Version="1.3.8" />
<PackageReference Include="Microsoft.AspNetCore.SystemWebAdapters" Version="1.3.0" />
<PackageReference Include="System.Drawing.Common" Version="8.0.8" />
<PackageReference Include="System.IO.Packaging" Version="8.0.0" />
<PackageReference Include="System.ServiceModel.Primitives" Version="4.10.3" />
<PackageReference Include="System.ServiceModel.Http" Version="4.10.3" />
<PackageReference Include="System.ServiceModel.Duplex" Version="4.10.3" />
<PackageReference Include="System.ServiceModel.NetTcp" Version="4.10.3" />
<PackageReference Include="System.ServiceModel.Security" Version="4.10.3" />
<PackageReference Include="System.ServiceModel.Federation" Version="4.10.3" />
</ItemGroup>
</Project>
参考
System.Diagnostics.EventLog
而不是 Microsoft.Extensions.Logging.EventLog
有效。