自定义Nuget包不会将.targets文件添加为csproj文件中的导入步骤

时间:2017-03-06 19:48:01

标签: c# visual-studio-2015 msbuild nuget csproj

我在VS2015中有一个现有的解决方案,有几个项目。我们有一些引用的dll,我们想将其转换为nuget包,以避免检入repo。我创建了两个包,并将它们放在网络上的文件共享中。这些软件包的安装方式与我的测试项目完全相同,包括调用导入软件包.targets文件。

这是目标文件,其中的一点是复制非托管代码dll:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <NativeLibs Include="$(MSBuildThisFileDirectory)**\*.dll" />
    <None Include="@(NativeLibs)">
      <Link>%(RecursiveDir)%(FileName)%(Extension)</Link>
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>
</Project>

在nuspec文件中引用了这样的内容:

<file src="build\win64\native\Some.Amazing.Nuget.Packge.x64.targets" target="build" />

以下是我的测试解决方案csproj文件中添加的内容:

</Project>
  .......

  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <!-- This was already there-->

  <Import Project="..\packages\Some.Amazing.Nuget.Packge.x64.1.1.1.1\build\Some.Amazing.Nuget.Packge.x64.targets" Condition="Exists('..\packages\Some.Amazing.Nuget.Packge.x64.1.1.1.1\build\Some.Amazing.Nuget.Packge.x64.targets')" />
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('..\packages\Some.Amazing.Nuget.Packge.x64.1.1.1.1\build\Some.Amazing.Nuget.Packge.x64.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Some.Amazing.Nuget.Packge.x64.1.1.1.1\build\Some.Amazing.Nuget.Packge.x64.targets'))" />
  </Target>  
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
       Other similar extension points exist, see Microsoft.Common.targets.
  <Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
  </Target>
  -->
</Project>

所以,一切似乎都运作良好。我也有一个x86版本的软件包。但是无论是平台还是建筑物都可以正常工作(实际上运行时显然是另一个故事)。

但是当我尝试将相同的软件包拉入 main 解决方案项目时,Import部分没有添加到csproj文件中。这意味着其他DLL不会复制到bin文件夹。我可以手动添加它,但似乎应该是必要的。有没有我应该注意的环境?

0 个答案:

没有答案