首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nuget不导入.targets

Nuget不导入.targets
EN

Stack Overflow用户
提问于 2018-09-28 21:22:56
回答 2查看 1.9K关注 0票数 1

我想通过nuget将我的.targets文件添加到项目中。我有下一个.nuspec文件:

代码语言:javascript
复制
<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文件:

代码语言:javascript
复制
<?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后,未将新项添加到项目中。任何帮助我们都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2018-10-12 11:06:39

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

除了.nuspec文件之外,您还应该使用Nuget CLI来打包文件。不要使用dotnet CLI

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

此时,如果您看到您的.targets文件或Rcs.dll丢失,这意味着您的.nuspec文件有问题。确保您的.nuspec文件的名称为ProjectName.nuspec

.csproj中指定.nuspec文件

代码语言:javascript
复制
<PropertyGroup>
  [...]
  <RestoreProjectStyle>PackageReference</RestoreProjectStyle>
  <NuspecFile>ProjectName.nuspec</NuspecFile>
  [...]
</PropertyGroup>

如果您的.nupkg中有.targets文件,那么这意味着它的执行并不是您所期望的那样。

安装Nuget包时,文件会存储到Nuget cache中。在Windows上,它位于%userprofile%\.nuget\packages。您的.targets文件和Rcs.dll也应该在那里

首先,您可以在.targets文件中包含以下内容

代码语言:javascript
复制
<Target Name="TestMessage" AfterTargets="Build" >
    <Message Text="***********************************************************" Importance="high"/>
    <Message Text="$(MSBuildThisFileDirectory)" Importance="high"/>
    <Message Text="***********************************************************" Importance="high"/>
</Target>

在构建项目时,您将看到当前文件夹实际上是您的缓存(而不是项目的目录)

如果我理解的话,你想要的是将你的Rcs.dll复制到你的bin文件夹中。要实现这一点,可以在.targets文件中编写类似的任务

代码语言:javascript
复制
<ItemGroup>
    <Content Include="$(MSBuildThisFileDirectory)\..\lib\Xamarin.iOS10\Rcs.dll">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
</ItemGroup>

这是一种正常行为,即不会将.targets文件复制到引用Nuget包的项目中。.targets文件应该保留在Nuget缓存中,但是从那里执行MsBuild命令来复制Rcs.dll文件。

我希望你能理解我的答案,它能解决你的问题。

票数 4
EN

Stack Overflow用户

发布于 2021-07-14 12:17:13

我发现,通过使用NuGet Package Explorer,必须正确命名目标文件。默认情况下,NPE使用.targtets。似乎其他名称可能不起作用。

我的Id是"Handy.TargetFrameworkVersionCumulativePreprocessorSymbols",,但我已将目标文件命名为"HandyTargetFrameworkVersionCumulativePreprocessorSymbols.targets".

一旦我在任何地方使用了"Handy.TargetFrameworkVersionCumulativePreprocessorSymbols“,它就像预期的那样工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52556376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档