Nuget不导入.targets

时间:2018-09-28 13:22:56

标签: nuget-package

我想通过nuget将.targets文件添加到项目中。 我有下一个.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>

安装此nuget后,新项目不会添加到项目中。 任何帮助将不胜感激

2 个答案:

答案 0 :(得分:2)

您确定.targets文件确实没有导入到您的Nuget包中吗?

.nuspec文件一起,您应该使用Nuget CLI打包文件。 不要使用dotnet CLI

使用.nupkg命令创建nuget pack文件后,您可以使用Nuget Package Explorer或简单地使用WinRar打开包(我相信这对于7- zip)。

在这一点上,如果您看到.targets文件或Rcs.dll丢失,则表明您的.nuspec文件有问题。 确保您的.nuspec文件的名称为ProjectName.nuspec

OR

在您的.nuspec中指定.csproj文件

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

如果您的.targets文件位于您的.nupkg中,则意味着其执行完全没有达到您的期望。

在安装Nuget软件包时,文件将存储到Nuget cache中。在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文件。

希望您能理解我的答案,并且可以解决您的问题。

答案 1 :(得分:0)

我发现通过使用 NuGet 包资源管理器,必须正确命名目标文件。默认情况下,NPE 使用 .targtets。其他名字好像不行。

我的 ID 是“Handy.TargetFrameworkVersionCumulativePreprocessorSymbols”,但我将目标文件命名为“HandyTargetFrameworkVersionCumulativePreprocessorSymbols.targets”。

一旦我在任何地方使用“Handy.TargetFrameworkVersionCumulativePreprocessorSymbols”,它就会按预期工作。