Я создал новый проект .NET Standard 2.0 и добавил следующий класс:
using System;
using System.Xml.Serialization;
namespace MyFunnyLib
{
[Serializable]
public class Foo
{
[XmlElement]
public string Bar { get; set; }
}
}
Мой файл .csproj выглядит так:
<Project Sdk = "Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<GenerateSerializationAssemblies>On</GenerateSerializationAssemblies>
</PropertyGroup>
<ItemGroup>
<PackageReference Include = "Newtonsoft.Json" Version = "9.0.1" />
<PackageReference Include = "Microsoft.XmlSerializer.Generator" Version = "8.0.0" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include = "Microsoft.XmlSerializer.Generator" Version = "8.0.0"/>
</ItemGroup>
</Project>
Когда я компилирую проект, я получаю следующий результат:
Build started at 16:15...
1>------ Build started: Project: MyFunnyLib, Configuration: Debug Any CPU ------
1>MyFunnyLib -> C:\Users\MyUserName\source\repos\MyFunnyLib\MyFunnyLib\bin\Debug\netstandard2.0\MyFunnyLib.dll
1>.NET Xml Serialization Generation Utility, Version 8.0.0]
1>Serialization Code File Name: C:\Users\MyUserName\source\repos\MyFunnyLib\MyFunnyLib\obj\Debug\netstandard2.0\MyFunnyLib.XmlSerializers.cs.
1>Generated serialization code for assembly C:\Users\MyUserName\source\repos\MyFunnyLib\MyFunnyLib\obj\Debug\netstandard2.0\MyFunnyLib.dll --> 'C:\Users\MyUserName\source\repos\MyFunnyLib\MyFunnyLib\obj\Debug\netstandard2.0\MyFunnyLib.XmlSerializers.cs'.
1>obj\Debug\netstandard2.0\MyFunnyLib.XmlSerializers.cs(122,20): warning CS0234: The type or namespace name 'Span<>' does not exist in the namespace 'System' (are you missing an assembly reference?)
1>obj\Debug\netstandard2.0\MyFunnyLib.XmlSerializers.cs(122,44): warning CS0518: Predefined type 'System.Span`1' is not defined or imported
1>obj\Debug\netstandard2.0\MyFunnyLib.XmlSerializers.cs(171,20): warning CS0234: The type or namespace name 'Span<>' does not exist in the namespace 'System' (are you missing an assembly reference?)
1>obj\Debug\netstandard2.0\MyFunnyLib.XmlSerializers.cs(171,44): warning CS0518: Predefined type 'System.Span`1' is not defined or imported
1>C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\microsoft.xmlserializer.generator\8.0.0\build\Microsoft.XmlSerializer.Generator.targets(55,5): warning : SGEN: Failed to generate the serializer for MyFunnyLib.dll. Please follow the instructions at https://go.microsoft.com/fwlink/?linkid=858594 and try again.
1>.NET Xml Serialization Generation Utility, Version 8.0.0]
1>EXEC : warning : Ignoring invalid command line argument: 'obj\Debug\netstandard2.0"'..
1>The path is empty. (Parameter 'path')
1>C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\microsoft.xmlserializer.generator\8.0.0\build\Microsoft.XmlSerializer.Generator.targets(85,5): warning MSB3073: The command "dotnet Microsoft.XmlSerializer.Generator --force --quiet --reference "C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\microsoft.xmlserializer.generator\8.0.0\lib\netstandard2.0\dotnet-Microsoft.XmlSerializer.Generator.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\microsoft.csharp\4.0.1\ref\netstandard1.0\Microsoft.CSharp.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\Microsoft.Win32.Primitives.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\mscorlib.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\netstandard.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\newtonsoft.json\9.0.1\lib\netstandard1.0\Newtonsoft.Json.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.AppContext.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Collections.Concurrent.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Collections.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Collections.NonGeneric.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Collections.Specialized.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.ComponentModel.Composition.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.ComponentModel.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.ComponentModel.EventBasedAsync.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.ComponentModel.Primitives.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.ComponentModel.TypeConverter.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Console.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Core.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Data.Common.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Data.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Diagnostics.Contracts.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Diagnostics.Debug.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Diagnostics.FileVersionInfo.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Diagnostics.Process.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Diagnostics.StackTrace.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Diagnostics.TextWriterTraceListener.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Diagnostics.Tools.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Diagnostics.TraceSource.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Diagnostics.Tracing.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Drawing.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Drawing.Primitives.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Dynamic.Runtime.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Globalization.Calendars.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Globalization.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Globalization.Extensions.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.IO.Compression.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.IO.Compression.FileSystem.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.IO.Compression.ZipFile.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.IO.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.IO.FileSystem.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.IO.FileSystem.DriveInfo.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.IO.FileSystem.Primitives.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.IO.FileSystem.Watcher.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.IO.IsolatedStorage.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.IO.MemoryMappedFiles.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.IO.Pipes.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.IO.UnmanagedMemoryStream.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Linq.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Linq.Expressions.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Linq.Parallel.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Linq.Queryable.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Net.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Net.Http.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Net.NameResolution.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Net.NetworkInformation.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Net.Ping.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Net.Primitives.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Net.Requests.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Net.Security.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Net.Sockets.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Net.WebHeaderCollection.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Net.WebSockets.Client.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Net.WebSockets.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Numerics.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.ObjectModel.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Reflection.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Reflection.Extensions.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Reflection.Primitives.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Resources.Reader.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Resources.ResourceManager.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Resources.Writer.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Runtime.CompilerServices.VisualC.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Runtime.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Runtime.Extensions.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Runtime.Handles.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Runtime.InteropServices.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Runtime.InteropServices.RuntimeInformation.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Runtime.Numerics.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Runtime.Serialization.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Runtime.Serialization.Formatters.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Runtime.Serialization.Json.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Runtime.Serialization.Primitives.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Runtime.Serialization.Xml.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Security.Claims.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Security.Cryptography.Algorithms.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Security.Cryptography.Csp.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Security.Cryptography.Encoding.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Security.Cryptography.Primitives.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Security.Cryptography.X509Certificates.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Security.Principal.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Security.SecureString.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.ServiceModel.Web.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Text.Encoding.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Text.Encoding.Extensions.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Text.RegularExpressions.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Threading.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Threading.Overlapped.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Threading.Tasks.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Threading.Tasks.Parallel.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Threading.Thread.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Threading.ThreadPool.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Threading.Timer.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Transactions.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.ValueTuple.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Web.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Windows.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Xml.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Xml.Linq.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Xml.ReaderWriter.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Xml.Serialization.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Xml.XDocument.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Xml.XmlDocument.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Xml.XmlSerializer.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Xml.XPath.dll;C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Xml.XPath.XDocument.dll" --assembly "" --type --out "obj\Debug\netstandard2.0\"" exited with code 1.
1>C:\Users\MyUserName\source\repos\MyFunnyLib\EXT\packages\microsoft.xmlserializer.generator\8.0.0\build\Microsoft.XmlSerializer.Generator.targets(86,5): warning : SGEN: Fail to generate obj\Debug\netstandard2.0\MyFunnyLib.XmlSerializers.dll.XmlSerializers'. Please follow the instructions at https://go.microsoft.com/fwlink/?linkid=858594 and try again.
1>Done building project "MyFunnyLib.csproj".
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
========== Build completed at 16:15 and took 05,700 seconds ==========
Я предполагаю, что проблема в вызове sgen с:
dotnet Microsoft.XmlSerializer.Generator --force --quiet --reference ...
В ... выше включены все файлы из каталога nuget-ext-. Я хочу, чтобы типы были сериализованы только из моей собственной сборки, а не всех остальных.
Что я здесь делаю не так?
Я уже пробовал добавить следующие строки в csproj, как сказано в документе:
<PropertyGroup>
<SGenReferences>C:\Users\MyUserName\source\repos\MyFunnyLib\MyFunnyLib\bin\Debug\netstandard2.0\MyFunnyLib.dll</SGenReferences>
<SGenTypes>MyFunnyLib.Foo</SGenTypes>
<SGenProxyTypes>false</SGenProxyTypes>
<SGenVerbose>true</SGenVerbose>
</PropertyGroup>
Я попробовал решение от @dbc, поначалу оно выглядело хорошо, но при попытке сериализации я получил много исключений во время выполнения. Поэтому я создаю небольшой пример проекта, в котором можно воспроизвести проблему.
Core.Types и Core.Validation являются проектами .netStandard. Остальные проекты — это .net Framework.
Я хочу создать XmlSerializer.Dll для CommonInterface.Transfer-Assembly. Я попробовал решение ниже со следующими строками в csproj:
<ItemGroup>
<PackageReference Include = "Microsoft.XmlSerializer.Generator" Version = "8.0.0" />
<PackageReference Include = "Newtonsoft.Json" Version = "13.0.3" />
<PackageReference Include = "System.Memory" Version = "4.5.4" Condition = "'$(TargetFramework)'=='netstandard2.0'" />
<PackageReference Include = "System.Memory" Version = "4.5.4" Condition = "'$(TargetFramework)'=='netstandard2.1'" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include = "Microsoft.XmlSerializer.Generator" Version = "8.0.0" />
</ItemGroup>
При сборке я получаю результат:
4> CommonInterface.Transfer -> C:\Users\User1\repos\WpfApp3\bin\MyApp\CommonInterface.Transfer.dll
4> Version for package `Microsoft.XmlSerializer.Generator` could not be resolved.
4>C:\Users\User1\.nuget\packages\microsoft.xmlserializer.generator\8.0.0\build\Microsoft.XmlSerializer.Generator.targets(51,5): warning MSB3073: The command "dotnet Microsoft.XmlSerializer.Generator "obj\Debug\CommonInterface.Transfer.dll" --force --quiet obj\Debug\sgen.rsp" exited with code 1.
4>C:\Users\User1\.nuget\packages\microsoft.xmlserializer.generator\8.0.0\build\Microsoft.XmlSerializer.Generator.targets(52,5): warning : SGEN: Failed to generate the serializer for CommonInterface.Transfer.dll. Please follow the instructions at https://go.microsoft.com/fwlink/?linkid=858594 and try again.





При сборке сборок sgen XmlSerializer на основе netstandard2.0 и netstandard2.1, помимо следования инструкциям из Использование генератора сериализатора Microsoft XML в .NET Core , вы должны добавить ссылку на System.Memory, которая обеспечивает доступ до Span<T>.
Используя этот ответ от Марка Гравелла для использования Span в netstandard 2.1 без зависимостей, я изменил ваш .csproj, чтобы условно добавить <PackageReference Include = "System.Memory" ... />
<Project Sdk = "Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<!--
I had to comment this out when building with .NET 8. If I left it in I got an error:
error MSB3474: The task "SGen" is not supported on the .NET Core version of MSBuild.
<GenerateSerializationAssemblies>On</GenerateSerializationAssemblies>
-->
</PropertyGroup>
<ItemGroup>
<PackageReference Include = "Microsoft.XmlSerializer.Generator" Version = "8.0.0" />
<PackageReference Include = "System.Memory" Version = "4.5.4" Condition = "'$(TargetFramework)'=='netstandard2.0'"/>
<PackageReference Include = "System.Memory" Version = "4.5.4" Condition = "'$(TargetFramework)'=='netstandard2.1'"/>
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include = "Microsoft.XmlSerializer.Generator" Version = "8.0.0" />
</ItemGroup>
</Project>
И мне удалось успешно выполнить сборку на основе netstandard2.0 и netstandard2.1, используя dotnet build с dotnet версии 8.0.203.
Примечания:
версия dotnet build для dotnet 8 сгенерировала ошибку для свойства <GenerateSerializationAssemblies>:
error MSB3474: The task "SGen" is not supported on the .NET Core version of MSBuild.
Поэтому мне пришлось это прокомментировать.
Зачем нужен Span<T>? Сгенерированный код можно найти в obj\Debug\netstandard2.0\MyFunnyLib.XmlSerializers.cs. Если отредактировать код, то вы увидите строку:
System.Span<bool> paramsRead = stackalloc bool[1];
Это вводит зависимость.
@Tomtom - о чём csproj ты говоришь? csproj, содержащий MyFunnyLib? Или какой-то другой csproj, который его потребляет? Мне удалось успешно создать DLL, содержащую MyFunnyLib, так что не могли бы вы поделиться минимальным воспроизводимым примером?
Я добавил небольшой пример
Я пробовал это, но это тоже не работает. У меня были исключения во время выполнения. Теперь я вернул проект с .netStandard2.0 на .net-Framework 4.8. Теперь, если я использую ваш пример в csproj, я получаю сообщение об ошибке Microsoft.XmlSerializer.Generator.targets(52,5): предупреждение: SGEN: не удалось создать сериализатор для MyLib.Transfer.dll.