#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″/>