Я разрабатываю проект Windows Studio CLI для развертывания на других компьютерах, и мне было интересно узнать о двух вещах, подходит ли этот тип проекта для развертывания решения, использующего библиотеку Windows.Management.Deployment, поскольку пространство имен не распознается файлом решения. Я уже провел некоторое исследование переполнения стека и реализовал следующее в своем файле .csproj
.
<Project Sdk = "Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<Reference Include = "System.Runtime.WindowsRuntime">
<HintPath>..\..\..\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Runtime.WindowsRuntime.dll</HintPath>
</Reference>
</ItemGroup>
</Project>
До сих пор то, что я пробовал, казалось, не работало, и я сомневаюсь, что моя установка завершена. Если есть предложения о том, как заставить эту библиотеку работать, это начальные объявления в моем файле C#.
using System;
using Windows.Management.Deployment;
using System.Linq;
Строка, которая вызывает проблемы, это строка:
var packageManager = new PackageManager();
Я также связываю вопрос, который я нашел полезным, но не работал в моей настройке, на случай, если кто-то столкнется с этим вопросом. Как получить доступ к пространству имен Windows.Management.Deployment в проекте Desktop в VS2017?
Я использую диспетчер пакетов Nuget, когда пытался использовать WindowsRuntime 4.7.0, он сказал, что он недоступен для пользователя.
<Project Sdk = "Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include = "System.Runtime.InteropServices.WindowsRuntime" Version = "4.3.0" />
<PackageReference Include = "System.Runtime.WindowsRuntime" Version = "4.7.0" />
</ItemGroup>
<ItemGroup>
<Reference Include = "System.Runtime.WindowsRuntime">
<HintPath>..\..\..\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Runtime.WindowsRuntime.dll</HintPath>
</Reference>
</ItemGroup>
</Project>
@Damien_The_Unbeliever Я отредактировал свой файл .csproj, ссылается ли он на эталонный пакет Nuget? Потому что я просто добавил, что использую Nuget, и появилась ссылка.
Что в конечном итоге решило проблему, так это тот факт, что на метаданные не ссылались должным образом, поэтому мне пришлось изменить целевую структуру.
<Project Sdk = "Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0-windows10.0.22000.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<Reference Include = "System.Management">
<HintPath>..\..\..\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Management.dll</HintPath>
</Reference>
</ItemGroup>
</Project>
Это решило проблему по крайней мере для меня.
Когда вы говорите, что смотрели на этот другой вопрос, включает ли он ссылку в комментарии, в которой говорится, как все изменилось с .NET 5? (Я предполагаю, что ваши
TargetFramework
значения не сравнимы с тем, что должно быть)