使用.targets替换NuGet包中的文件

使用.targets替换NuGet包中的文件,nuget,Nuget,我有一个依赖于另一个NuGet包的NuGet包,但我想用我的一个来替换其中一个非托管DLL。这很好,但现在我尝试使用.targets文件添加对x86和x64的支持。当我的目标应用程序构建时,它会删除原始版本,而不是替换版本 这是我的.nuspec: <?xml version="1.0" encoding="utf-8"?> <package xmlns="http://schemas.microsoft.com/packagi

我有一个依赖于另一个NuGet包的NuGet包,但我想用我的一个来替换其中一个非托管DLL。这很好,但现在我尝试使用.targets文件添加对x86和x64的支持。当我的目标应用程序构建时,它会删除原始版本,而不是替换版本

这是我的.nuspec:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
  <metadata>
    <id>MyPackage</id>
    <version>2.0.0</version>
    <dependencies>
      <group targetFramework=".NETFramework4.5.2">
        <dependency id="YourPackage" version="1.0.0" />
      </group>
    </dependencies>
  </metadata>
  <files>
    <file src="MyPackage.targets" target="build\net452" />
    <file src="..\lib\x86\thepackage.dll" target="lib\net452\x86" />
    <file src="..\lib\x64\thepackage.dll" target="lib\net452\x64" />
  </files>
</package>

我的包裹
2.0.0
以下是我的目标:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="PlatformCheck" BeforeTargets="InjectReference"
    Condition="(('$(Platform)' != 'x86') AND  ('$(Platform)' != 'x64'))">
    <Error  Text="$(MSBuildThisFileName) does not work correctly on '$(Platform)' platform. You need to specify platform (x86 or x64)." />
  </Target>

  <Target Name="InjectReference" AfterTargets="ResolveAssemblyReferences">
    <ItemGroup Condition="'$(Platform)' == 'x86' or '$(Platform)' == 'x64'">
      <Reference Include="MyPackage">
        <HintPath>$(MSBuildThisFileDirectory)$(Platform)\thepackage.dll</HintPath>
      </Reference>
    </ItemGroup>
  </Target>
</Project>

$(MSBuildThisFileDirectory)$(平台)\thepackage.dll
我做错了什么

编辑:如果我更改.nuspec

<file src="..\lib\x86\thepackage.dll" target="lib\net452" />
<file src="..\lib\x64\thepackage.dll" target="lib\net452" />


。。。然后它拉下了我的版本,但对x86和x64版本都使用x86。

我解决了这个问题,将文件放在build文件夹中,然后简单地复制目标文件

.nuspec:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
  <metadata>
    <id>MyPackage</id>
    <version>2.0.0</version>
    <dependencies>
      <group targetFramework=".NETFramework4.5.2">
        <dependency id="YourPackage" version="1.0.0" />
      </group>
    </dependencies>
  </metadata>
  <files>
    <file src="MyPackage.targets" target="build\net452" />
    <file src="..\lib\x86\thepackage.dll" target="build\net452\x86" />
    <file src="..\lib\x64\thepackage.dll" target="build\net452\x64" />
  </files>
</package>

我的包裹
2.0.0
.目标:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="PlatformCheck" BeforeTargets="InjectReference"
    Condition="(('$(Platform)' != 'x86') AND  ('$(Platform)' != 'x64'))">
    <Error  Text="$(MSBuildThisFileName) does not work correctly on '$(Platform)' platform. You need to specify platform (x86 or x64)." />
  </Target>

  <Target Name="InjectReference" AfterTargets="ResolveAssemblyReferences">
    <ItemGroup Condition="'$(Platform)' == 'x86' or '$(Platform)' == 'x64'">
      <Reference Include="MyPackage">
        <HintPath>$(MSBuildThisFileDirectory)$(Platform)\thepackage.dll</HintPath>
      </Reference>
    </ItemGroup>
  </Target>
</Project>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <Target Name="PlatformCheck" BeforeTargets="InjectReference"
    Condition="(('$(Platform)' != 'x86') AND  ('$(Platform)' != 'x64'))">
    <Error Text="$(MSBuildThisFileName) does not work correctly on '$(Platform)' platform. You need to specify platform (x86 or x64)." />
  </Target>

  <ItemGroup>
    <None Include="$(MSBuildThisFileDirectory)$(Platform)\thepackage.dll">
      <Link>%(RecursiveDir)%(FileName)%(Extension)</Link>
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
  </ItemGroup>

</Project>

%(RecursiveDir)%(文件名)%(扩展名)
总是