Система c# protobuf.Время выполнения.Услуги компиляторов.Небезопасный

#c# #.net #protocol-buffers

Вопрос:

Я использую Visual Studio 2019, Windows 10, .Net Framework 4.8. (если вам нужна дополнительная информация, спросите)

У меня есть model.proto файл , в который компилируется Model.pb.cs , и я использую его в своем проекте.

Когда я заполняю модель данными и пытаюсь сохранить ее в файл ….

 using PMOD = MyProtobuf.Model;

using NLog;
using NetMQ;
using NetMQ.Sockets;
using System;
using System.Text;
using System.IO;

var req = PMOD.MyDataModel();
// fill up req with all data ...
using (var file_output = File.Create("path/to/save/PB/file/into")) {
   using (var stream_output = new Google.Protobuf.CodedOutputStream(file_output)) {
      req.WriteTo(stream_output); <---- this one gives errors
   }
}

 

Такое случается.

 Could not load file or assembly 'System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
 

это мой program.csproj

 <Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net48</TargetFramework>
    <PlatformTarget>x64</PlatformTarget>
    <OutputType>Library</OutputType>
  </PropertyGroup>

  <ItemGroup>
      <Protobuf Include="../../protobuf/model.proto" Link="model.proto" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="coverlet.msbuild" Version="3.0.3">
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="Google.Protobuf" Version="3.15.6" />
    <PackageReference Include="Grpc" Version="2.36.4" />
    <PackageReference Include="MathNet.Numerics" Version="4.15.0" />
    <PackageReference Include="MathNet.Spatial" Version="0.6.0" />
    <PackageReference Include="NetMQ" Version="4.0.1.6" />
    <PackageReference Include="NLog" Version="4.7.9" />
    <PackageReference Include="System.Text.Json" Version="5.0.2" />
  </ItemGroup>

  etc etc ... with files to compile
 

Комментарии:

1. Помогает ли добавление ссылки? самородок

2. ссылка, о которой идет речь, будет такой <PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="5.0.0" /> , но среда выполнения все равно не сможет ее найти.

3. Эта сборка является известной болевой точкой и обычно требует перенаправления привязки сборки; см. nickcraver.com/blog/2020/02/11/binding-redirects — или лучше: используйте .NET 5 (или более позднюю версию) — .net framework (4.8 и т.д.) Подходит к концу срока службы

4. спасибо, Марк. Я не могу использовать . Net 5, потому что не совместим с одной из основных библиотек DLL, которые я использую. Я попробовал это как свое app.config . проблемы все еще существуют. Услуги компиляторов. Небезопасный» PublicKeyToken=»b03f5f7f11d50a3a» культура=»нейтральная» /> ><Привязка к прямой старой версии=»0.0.0.0-4.0.4.1″ Новая версия=»5.0.0″/>