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