我想通过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后,新项目不会添加到项目中。 任何帮助将不胜感激
答案 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”,它就会按预期工作。