Начало редактирования №1
Чтобы воспроизвести это:
- Создайте новое «ванильное» приложение WPF, адресованное .Net Core 3.1.
- Добавьте
Windows Application Packaging Project
в решение (выполните действия, указанные в Настройте настольное приложение для упаковки MSIX в Visual Studio) - Попробуйте "развернуть" на UNC-путь ...
Конец редактирования №1
Я нахожусь в процессе преобразования приложения WPF .net framework в .net core 3.1. Это приложение является «внутренним» инструментом, который мы всегда развертывали с помощью ClickOnce, чтобы разместить установку на общем UNC-пути. Так просто....
Сейчас я переписал его в .Net Core, и мне нужно его развернуть. Обнаружив, что ClickOnce больше не доступен, я понимаю, что должен пойти по маршруту «MSIX». Документация выглядит так, как будто она должна быть простой, но я думаю, мне не хватает нескольких вещей ...
1 - Мне пришлось изменить настройки разработчика с «Боковой панели» на «Режим разработчика» 2 - Он отлично работает на моем компьютере, но в Azure DevOps не работает 3 - и как мне его развернуть ...?
Давайте рассмотрим каждый по очереди.
1 - Боковая панель => Проблема с режимом разработчика
Я добавляю в свое решение новый проект упаковки приложений Windows, выбираю версию Windows 1909 как для целевой, так и для минимальной версии и устанавливаю свое приложение WPF в качестве точки входа. Я пытаюсь запустить это, и это заставляет меня перейти из «Боковой панели» в «Режим разработчика».
Это влияет только на меня как на разработчика ... если да, то ничего страшного. Я сомневаюсь, что конечные пользователи захотят это сделать.
2 - Сбой конвейера сборки Azure DevOps
Локально он компилируется отлично, даже в режиме выпуска, где для всех предупреждений установлено значение «Ошибка» и запущен FxCop. Отправьте его в Azure, и он говорит:
[ошибка] C: \ Program Files \ dotnet \ sdk \ 3.1.201 \ Sdks \ Microsoft.NET.Sdk \ target \ Microsoft.PackageDependencyResolution.targets (234,5): ошибка NETSDK1047: файл активов 'd: \ a \ 1 \ s \ MyApp \ MyApp \ obj \ project.assets.json 'не имеет цели для' .NETCoreApp, Version = v3.1 / win-x86 '.
Убедитесь, что восстановление выполнено и вы включили netcoreapp3.1 в TargetFrameworks вашего проекта.
Вам также может потребоваться включить win-x86 в RuntimeIdentifiers вашего проекта.
Хорошо
- в моем YAML-файле есть шаг «Восстановить пакеты NuGet», предшествующий успешной сборке.
- Я ищу свое приложение в файле проекта SKD и вижу
<TargetFramework>netcoreapp3.1</TargetFramework>
- Что касается RuntimeIdentifiers, я нашел ссылку Дополнения к формату csproj для .NET Core, поэтому добавлен
<RuntimeIdentifiers>win-x64;win-x86</RuntimeIdentifiers>
сразу под<TargetFramework>netcoreapp3.1</TargetFramework>
(следует ли уточнить использованиеwin10-x64;win10-x86
?)
В любом случае, это не удалось с немного другим сообщением:
Было несоответствие между архитектурой процессора создаваемого проекта «MSIL» и архитектурой процессора эталонного «пути к моей dll», «x86». Это несоответствие может вызвать сбои во время выполнения. Рассмотрите возможность изменения целевой архитектуры процессора вашего проекта с помощью Configuration Manager, чтобы согласовать архитектуры процессоров между вашим проектом и ссылками, или принять зависимость от ссылок с архитектурой процессора, которая соответствует целевой архитектуре процессора вашего проекта.
3 - как мне его развернуть?
Из MSIX: современный способ развертывания настольных приложений в Windows, в котором говорится:
Чтобы создать фактический пакет MSIX, есть мастер, доступный в Project | Магазин | Создавайте пакеты приложений в Visual Studio.
На моей машине их нет ... Я даже дошел до установки рабочей нагрузки Visual Studio «Разработка универсальной платформы Windows». Я вижу "Развернуть" в меню "Сборка" ... но это оно .... где мне указать путь UNC?
Я думаю, что упускаю кое-что довольно фундаментальное ....
Соответствующая часть моего CSPROJ - это
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RuntimeIdentifiers>win-x64;win-x86</RuntimeIdentifiers>
<UseWPF>true</UseWPF>
</PropertyGroup>
Пакетный проект:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '15.0'">
<VisualStudioVersion>15.0</VisualStudioVersion>
</PropertyGroup>
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|x86">
<Configuration>Debug</Configuration>
<Platform>x86</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x86">
<Configuration>Release</Configuration>
<Platform>x86</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|ARM">
<Configuration>Debug</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM">
<Configuration>Release</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|AnyCPU">
<Configuration>Debug</Configuration>
<Platform>AnyCPU</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|AnyCPU">
<Configuration>Release</Configuration>
<Platform>AnyCPU</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup>
<WapProjPath Condition="'$(WapProjPath)'==''">$(MSBuildExtensionsPath)\Microsoft\DesktopBridge\</WapProjPath>
</PropertyGroup>
<Import Project="$(WapProjPath)\Microsoft.DesktopBridge.props" />
<PropertyGroup>
<ProjectGuid>08b169a2-6461-440b-afa1-ca35c7d98aa7</ProjectGuid>
<TargetPlatformVersion>10.0.18362.0</TargetPlatformVersion>
<TargetPlatformMinVersion>10.0.18362.0</TargetPlatformMinVersion>
<DefaultLanguage>en-US</DefaultLanguage>
<AppxPackageSigningEnabled>True</AppxPackageSigningEnabled>
<EntryPointProjectUniqueName>..\MyApp\MyApp.csproj</EntryPointProjectUniqueName>
<PackageCertificateThumbprint>01C08F1E21D5624A484DB362BE4F056504B825CC</PackageCertificateThumbprint>
</PropertyGroup>
<ItemGroup>
<AppxManifest Include="Package.appxmanifest">
<SubType>Designer</SubType>
</AppxManifest>
</ItemGroup>
<ItemGroup>
<Content Include="Images\SplashScreen.scale-200.png" />
<Content Include="Images\LockScreenLogo.scale-200.png" />
<Content Include="Images\Square150x150Logo.scale-200.png" />
<Content Include="Images\Square44x44Logo.scale-200.png" />
<Content Include="Images\Square44x44Logo.targetsize-24_altform-unplated.png" />
<Content Include="Images\StoreLogo.png" />
<Content Include="Images\Wide310x150Logo.scale-200.png" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\MyApp\MyApp.csproj">
<SkipGetTargetFrameworkProperties>True</SkipGetTargetFrameworkProperties>
</ProjectReference>
</ItemGroup>
<Import Project="$(WapProjPath)\Microsoft.DesktopBridge.targets" />
</Project>
(могу / должен я удалить ссылки на «DEBUG» и «ARM», которые, я не думаю, будут актуальными ??)
И манифест
<?xml version="1.0" encoding="utf-8"?>
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap rescap">
<Identity
Name="46aebba6-d403-4412-89c0-05279b36e54e"
Publisher="CN=MyCompany"
Version="2020.5.0.0" />
<Properties>
<DisplayName>MyApp</DisplayName>
<PublisherDisplayName>MyCompany</PublisherDisplayName>
<Logo>Images\StoreLogo.png</Logo>
</Properties>
<Dependencies>
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.14393.0" MaxVersionTested="10.0.14393.0" />
</Dependencies>
<Resources>
<Resource Language="x-generate"/>
</Resources>
<Applications>
<Application Id="App"
Executable="$targetnametoken$.exe"
EntryPoint="$targetentrypoint$">
<uap:VisualElements
DisplayName="MyApp.Package"
Description="MyApp.Package"
BackgroundColor="transparent"
Square150x150Logo="Images\Square150x150Logo.png"
Square44x44Logo="Images\Square44x44Logo.png">
<uap:DefaultTile Wide310x150Logo="Images\Wide310x150Logo.png" />
<uap:SplashScreen Image="Images\SplashScreen.png" />
</uap:VisualElements>
</Application>
</Applications>
<Capabilities>
<Capability Name="internetClient" />
<rescap:Capability Name="runFullTrust" />
</Capabilities>
</Package>
Спасибо!
There was a mismatch between the processor architecture of the project being built "MSIL" and the processor architecture of the reference "C:\MyApp\MyApp\bin\x86\Release\netcoreapp3.1\win-x86\MyApp.dll", "x86". This mismatch may cause runtime failures. Please consider changing the targeted processor architecture of your project through the Configuration Manager so as to align the processor architectures between your project and references, or take a dependency on references with a processor architecture that matches the targeted processor architecture of your project
- person DrGriff   schedule 18.05.2020Project=MyApp,Configuration=Release,Platform=Any CPU,Build=checkedDeploy=unchecked
иProject=MyApp.Package,Configuration=Release,Platform=Any CPU,Build=checkedDeploy=unchecked
. Они такие же ... почему выше сообщение об ошибке? - person DrGriff   schedule 18.05.2020ClickOnce
, и мы немедленно отказались от подхода MSIX для этого и с тех пор не оглядывались назад. Это быстро и работает, и все разработчики снова улыбаются. - person DrGriff   schedule 21.05.2021