我在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" />

以下是我的 test 解决方案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文件夹 . 我可以手动添加它,但似乎应该是必要的 . 有一个我应该注意的环境吗?