Может ли COMReference быть полностью перенесен в PackageReference? - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь избавить себя от папки lib, которая есть в моем решении, перенося dll в nuget, а также переключаясь с Packages.config на Packagereference.Это хорошо работает для большинства библиотек.

Но теперь у меня есть некоторые COM-ссылки, которые я не уверен, правильно ли то, что я пытаюсь сделать.В .csproj это выглядит так:

<COMReference Include="MyLib">
  <Guid>{ABCDEFA1-AD1F-AFBE-ACED-AFDF123AADEE}</Guid>
  <VersionMajor>X</VersionMajor>
  <VersionMinor>Y</VersionMinor>
  <Lcid>0</Lcid>
  <WrapperTool>tlbimp</WrapperTool>
  <Isolated>False</Isolated>
  <EmbedInteropTypes>True</EmbedInteropTypes>
</COMReference>

И как prebuild-событие у меня есть

<PreBuildEvent>
    regsvr32 /s $(SolutionDir)Lib\MyLib.dll
</PreBuildEvent>

Теперь я раздражен, потому что я прочитал эту статью где он сказал мне, чтобы добавить ReferencePath и EmbedInteropTypes через .targets из пакета nuget.

Однако я не получил это работать (или, кажется, этого было недостаточно в моем случае (глядяна GUID, на который ссылаются в COMReference))

Так что это заставило меня задуматься, может быть, мне вообще не нужно превращать это в Packagereference, а просто добавить один (который включает в себя «MyLib»)), пусть prebuild-событие идет против этой dll из моей папки-пакета и оставляет COMReference как есть.

Я только что добавил нужные мне библиотеки в пакет nuget, который я извлекаю под content\x86, и изменилсобытие prebuild для указания на $([MSBuild]::EnsureTrailingSlash('$(NugetPackageRoot)')).

Кажется, что это работает, оно собирается, и у меня нет ошибок времени выполнения (пока), но я не уверен, является ли это наилучшей практикой или если яЯ что-то упускаю, любые указатели очень ценятся.

...