Не удается устранить ошибку «Сборка, указанная в манифесте зависимостей приложения, не найдена» - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь опубликовать sh мой C# проект на исполняемый файл для его распространения. Тем не менее, я ссылался на Interop.IWshRuntimeLibrary и с тех пор, как я его включил, мой проект публикует, но затем падает при выполнении с:

An assembly specified in the application dependencies manifest was not found:
    package: 'Interop.IWshRuntimeLibrary', version: '1.0.0.0'
    path: 'Interop.IWshRuntimeLibrary.dll'

До сих пор я пытался:

  • Задание для свойств Interop.IWshRuntimeLibrary значения типа «Копировать локально» и «Внедрить» каждой комбинации значений true / false.

  • Установка для тега ниже значения true / false в файле .csproj.

<PublishWithAspNetCoreTargetManifest>
  • Установка пакета NuGet System.Runtime.InteropServices.

Мой файл .csproj в настоящее время выглядит следующим образом:

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <RootNamespace>Project</RootNamespace>
    <UseWPF>true</UseWPF>
    <UseWindowsForms>true</UseWindowsForms>
  </PropertyGroup>

  <ItemGroup>
    <COMReference Include="IWshRuntimeLibrary.dll">
      <Guid>f935dc20-1cf0-11d0-adb9-00c04fd58a0b</Guid>
      <VersionMajor>1</VersionMajor>
      <VersionMinor>0</VersionMinor>
      <WrapperTool>tlbimp</WrapperTool>
      <Lcid>0</Lcid>
      <Isolated>false</Isolated>
    </COMReference>
  </ItemGroup>

Другие ссылки в проекте, вроде Newtonsoft, работают нормально. Я проконсультировался по всем темам, которые я могу найти в Интернете, касающихся этого. Самым близким к другому потоку, описывающему мою проблему, был Не удалось загрузить файл или сборку Interop.IWshRuntimeLibrary? , но я также не нашел там никакой полезной информации.

В идеале я хочу просто щелкнуть publi sh и publi sh в папке на моем рабочем столе - желательно в виде одного .exe, но вся папка в порядке, если она работает. Я не знаю, возможно, я пропускаю шаг где-то, поскольку я никогда раньше не использовал функцию publi sh. Я в недоумении, что попробовать дальше. Спасибо.

1 Ответ

0 голосов
/ 27 апреля 2020

Как вы публикуете сейчас?

Вы должны быть в состоянии запустить команду publi sh с флагом, чтобы сообщить об этом publi sh в виде одного файла:

dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true

Дополнительная информация здесь: https://dotnetcoretutorials.com/2019/06/20/publishing-a-single-exe-file-in-net-core-3-0/

Но что касается вашего конкретного вопроса. При публикации в виде отдельного файла (что вы, возможно, уже делаете), существует некоторый уровень взаимодействия с деревьями, чтобы попытаться ограничить зависимости, которые он публикует. В некоторых случаях, если вы ссылаетесь на библиотеку, которая загружается с использованием отражения или подобного, то ILLinker не знает, что на самом деле на нее ссылаются и используют.

Чтобы обойти это, вы можете добавить в свой файл csproj следующее:

<ItemGroup>
  <TrimmerRootAssembly Include="Interop.IWshRuntimeLibrary" />
</ItemGroup>

Затем опубликуйте sh ваш проект так:

dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true /p:PublishTrimmed=true

Подробнее информация о том, как работает ILLinker: https://dotnetcoretutorials.com/2019/06/27/the-publishtrimmed-flag-with-il-linker/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...