我在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文件夹。我可以手动添加它,但似乎应该是必要的。有没有我应该注意的环境?