【问题标题】:Specify architecture and Debug/Release modes in *nuspec file to publish a DLL C++ project在 *nuspec 文件中指定体系结构和调试/发布模式以发布 DLL C++ 项目
【发布时间】:2021-01-03 12:22:33
【问题描述】:

我有一个 Visual Studio C++ 项目,它在调试和发布模式下为 x86 和 x64 架构创建 DLL。关于这些规范,我应该将此包发布为 nuget 包。所以我的包中应该有 4 个 DLL。我的问题是如何在我的 nuspec 文件中指定 x86、x64。我在考虑是否应该在每个 filetarget 字段中指定它,但我找不到任何关于如何准确指定这些规范的文档。 我的 nuspec 文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
        <!-- Required elements-->
        <id>counterpartylookup</id>
        
        <version>0.0.0</version>
        
        <description>counterpartylookup/v140/win32/x86/x64</description>
        
        <authors>***</authors>

        <!-- Optional elements -->
        <!-- ... -->
        <owners>...</owners>
        
        <licenseUrl>***</licenseUrl>
        
        <projectUrl>***</projectUrl>
        
        <dependencies>
            ***
        </dependencies>
        
        <tags> {vc140, win32, x64, x86, dynamic, C++, native}</tags>
    </metadata>

        <files>
            <file src="..\shared\v140\bin\x64\Release\CounterPartyLookup.dll" target="lib" />
            <file src="..\shared\v140\bin\x64\Debug\CounterPartyLookup.dll" target="lib" />
             <file src="..\shared\v140\bin\x86\Release\CounterPartyLookup.dll" target="lib" />
             <file src="..\shared\v140\bin\x86\Debug\CounterPartyLookup.dll" target="lib" />
        </files>
    <!-- Optional 'files' node -->
</package>

【问题讨论】:

  • net项目上是否要根据具体平台引用这个c++ nuget包?

标签: c++ dll visual-studio-2015 nuget nuspec


【解决方案1】:

或者你可以尝试另一个:

1) 在您的项目文件夹中创建一个名为&lt;package_id&gt;.targets 的文件。 在你身边,你应该把它命名为counterpartylookup.targets

在下面写下这些:

<Project>
    <ItemGroup Condition="'$(Platform)'=='x64' and '$(Cofiguration)'=='Debug'">
        <Reference Include="$(MSBuildThisFileDirectory)..\Reference\x64\Debug\CounterPartyLookup.dll"></Reference>
    </ItemGroup>
    <ItemGroup Condition="'$(Platform)'=='x86' and '$(Cofiguration)'=='Debug'">
        <Reference Include="$(MSBuildThisFileDirectory)..\Reference\x86\Debug\CounterPartyLookup.dll"></Reference>
    </ItemGroup>
    <ItemGroup Condition="'$(Platform)'=='x64' and '$(Cofiguration)'=='Release'">
        <Reference Include="$(MSBuildThisFileDirectory)..\Reference\x64\Release\CounterPartyLookup.dll"></Reference>
    </ItemGroup>
    <ItemGroup Condition="'$(Platform)'=='x86' and '$(Cofiguration)'=='Release'">
        <Reference Include="$(MSBuildThisFileDirectory)..\Reference\x86\Release\CounterPartyLookup.dll"></Reference>
    </ItemGroup>
</Project>

2)修改你的nuspec文件:

<files>
    <file src="..\shared\v140\bin\x64\Release\CounterPartyLookup.dll" target="Reference\x64\Release" />
    <file src="..\shared\v140\bin\x64\Debug\CounterPartyLookup.dll" target="Reference\x64\Debug" />
     <file src="..\shared\v140\bin\x86\Release\CounterPartyLookup.dll" target="Reference\x86\Release" />
     <file src="..\shared\v140\bin\x86\Debug\CounterPartyLookup.dll" target="Reference\x86\Debug" />
     <file src="counterpartylookup.targets" target="build"/>
</files>

3) 重新打包您的 c++ 项目,然后在安装新项目之前,您应该删除 C:\Users\xxx(current user)\.nuget\packages 下的所有 nuget 缓存

【讨论】:

    【解决方案2】:

    我的问题是如何在我的 nuspec 文件中指定 x86、x64。

    您需要将 dll 放在名为 runtimes 的文件夹中,该文件夹位于名为 {platform}-{architecture}\lib{framework} 或 {platform}-{architecture}\native 的子文件夹中。

    文件夹结构:

      \runtimes
        \x86
            \Debug
                  \Release
        \x64
            \Debug
                  \Release
    

    nuspec文件是这样的:

    <files>
        <file src="..\shared\v140\bin\x64\Release\CounterPartyLookup.dll" target="runtimes\ x64\Release " />
        <file src="..\shared\v140\bin\x64\Debug\CounterPartyLookup.dll" target=" runtimes\ x64\Debug " />
         <file src="..\shared\v140\bin\x86\Release\CounterPartyLookup.dll" target=" runtimes\ x86\Release " />
         <file src="..\shared\v140\bin\x86\Debug\CounterPartyLookup.dll" target=" runtimes\ x86\Debug " />
    </files>
    

    相关文件:Architecture-specific foldersAdding the native implementation libraries

    【讨论】:

      猜你喜欢
      • 2018-02-04
      • 1970-01-01
      • 2020-11-20
      • 1970-01-01
      • 1970-01-01
      • 2014-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多