C# 自定义Nuget包未将.targets文件作为导入步骤添加到csproj文件中

C# 自定义Nuget包未将.targets文件作为导入步骤添加到csproj文件中,c#,visual-studio-2015,msbuild,nuget,csproj,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.mic

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

%(RecursiveDir)%(文件名)%(扩展名)
保存最新
在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>

.......
此项目引用此计算机上缺少的NuGet包。使用NuGet Package Restore下载它们。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkID=322105. 缺少的文件是{0}。
所以,一切似乎都很顺利。我还有一个x86版本的软件包。但无论是平台还是建筑,两者都可以正常工作(实际上运行时显然是另一回事)


但是,当我尝试将同一个包拉入它所要用于的主解决方案项目时,
Import
部分不会添加到csproj文件中。这意味着附加DLL不会复制到bin文件夹中。我可以手动添加它,但似乎这应该是必要的。是否有我应该注意的设置?

应该可以。主要解决方案是否有特殊项目?比如说使用project.json文件?@MattWard谢谢你的回复。不,除了c#库、单元测试和WPF应用程序之外,没有别的。没有什么需要任何其他东西的标准安装的VSI不知道问题可能是什么。如果在项目中使用packages.config文件,.targets文件是以包id命名的(看起来是这样),那么我希望将导入添加到.csproj文件中。唯一的另一个想法是,如果packages.config文件中已经有该包id,那么它将不会再次安装它。