Nuget не импортирует .targets - PullRequest
       7

Nuget не импортирует .targets

0 голосов
/ 28 сентября 2018

Я хочу добавить свой файл .targets в проект через nuget.У меня есть следующий файл .nuspec:

<package >
  <metadata>
  ...
  </metadata>
  <files>
    <file src="..\..\Rcs\Rcs\bin\Release\Rcs.targets" target="build\Rcs.targets" />
    <file src="..\..\Rcs\Rcs\bin\Release\Rcs.dll" target="lib\Xamarin.iOS10\Rcs.dll" />     


    <file src="..\..\Rcs\Rcs\bin\Release\*.dll" />
    <file src="..\..\Rcs\Rcs\bin\Release\*.config" />

  </files>
</package>

И файл .targets:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
        <RcsDirectory Condition="$(RcsDirectory) == '' Or $(RcsDirectory) == '*Undefined*'">$(MSBuildThisFileDirectory)..\..\</RcsDirectory>
  </PropertyGroup>

  <UsingTask
    TaskName="Rcs.RcsBuildTask"
    AssemblyFile="$(RcsDirectory)Rcs.dll" />

  <Target AfterTargets="Build" Name="RcsBuildTask">
    <RcsBuildTask
      ProjectPath="$(MSBuildProjectFullPath)"
      RootNamespace="$(RootNamespace)"
    />
  </Target>
</Project>

Новое не добавлено в проект после установки этого нугета.Любая помощь будет оценена

1 Ответ

0 голосов
/ 12 октября 2018

Вы уверены, что файл .targets действительно не импортирован в ваш пакет Nuget?

Наряду с файлом .nuspec вы должны использовать Nuget CLI для упаковки ваших файлов. Не используйте CLI dotnet

После того, как вы создали .nupkg файл с помощью команды nuget pack, вы можете открыть свой пакет, используя Nuget Package Explorer илипросто WinRar (я думаю, что это должно работать и с 7-zip).

На этом этапе, если вы видите, что ваш файл .targets или ваш Rcs.dll отсутствуют, это означает, что у вас естьпроблема с файлом .nuspec.Убедитесь, что ваш .nuspec файл имеет имя ProjectName.nuspec

ИЛИ

Укажите файл .nuspec в вашем .csproj

<PropertyGroup>
  [...]
  <RestoreProjectStyle>PackageReference</RestoreProjectStyle>
  <NuspecFile>ProjectName.nuspec</NuspecFile>
  [...]
</PropertyGroup>

Если ваш .targetsфайл находится в вашем .nupkg, то это означает, что его выполнение просто не соответствует вашим ожиданиям.

При установке пакета Nuget файлы сохраняются в кэше Nuget .На Windows это находится в %userprofile%\.nuget\packages.Ваш .targets файл и ваш Rcs.dll также должны быть там

Прежде всего вы можете включить это в ваш .targets файл

<Target Name="TestMessage" AfterTargets="Build" >
    <Message Text="***********************************************************" Importance="high"/>
    <Message Text="$(MSBuildThisFileDirectory)" Importance="high"/>
    <Message Text="***********************************************************" Importance="high"/>
</Target>

При создании проекта вы увидитетекущая папка фактически является вашим кешем (не каталогом вашего проекта)

Если я понимаю, вам нужно скопировать Rcs.dll в папку bin.Для этого вы можете написать аналогичную задачу в вашем .targets файле

<ItemGroup>
    <Content Include="$(MSBuildThisFileDirectory)\..\lib\Xamarin.iOS10\Rcs.dll">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
</ItemGroup>

Это нормальное поведение, когда файл .targets не копируется в ваш проект, ссылающийся на ваш пакет Nuget.Файл .targets должен оставаться в кэше Nuget, но оттуда выполните команду MsBuild, чтобы скопировать файл Rcs.dll.

Надеюсь, вы понимаете мой ответ, и он решит вашу проблему.

...