Укажите архитектуру и режимы отладки / выпуска в файле * nuspec для публикации проекта DLL C

#c #dll #visual-studio-2015 #nuget #nuspec

#c #dll — файл #visual-studio-2015 #нагет #nuspec #dll #nuget

Вопрос:

У меня есть проект Visual Studio C , который создает DLL для архитектур x86 и x64 в режимах отладки и выпуска. Я должен опубликовать этот пакет как пакет nuget в соответствии с этими спецификациями. Итак, у меня должно быть 4 библиотеки DLL в моем пакете. Мой вопрос заключается в том, как указать x86, x64 в моем файле nuspec. Я думал, следует ли указывать это в поле target каждого файла, но я не могу найти никакой документации о том, как точно указать эти спецификации. Мой файл 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="..sharedv140binx64ReleaseCounterPartyLookup.dll" target="lib" />
            <file src="..sharedv140binx64DebugCounterPartyLookup.dll" target="lib" />
             <file src="..sharedv140binx86ReleaseCounterPartyLookup.dll" target="lib" />
             <file src="..sharedv140binx86DebugCounterPartyLookup.dll" target="lib" />
        </files>
    <!-- Optional 'files' node -->
</package>
  

Комментарии:

1. Вы хотели сослаться на этот пакет c nuget, основанный на конкретной платформе net project?

Ответ №1:

Мой вопрос в том, как указать x86, x64 в моем файле nuspec.

Вам необходимо поместить библиотеки DLL в папку с именем runtimes в подпапках с именем {platform}-{architecture}lib{framework} или {platform}-{architecture}native.

Структура папок:

   runtimes
    x86
        Debug
              Release
    x64
        Debug
              Release
  

Файл nuspec имеет вид:

 <files>
    <file src="..sharedv140binx64ReleaseCounterPartyLookup.dll" target="runtimes x64Release " />
    <file src="..sharedv140binx64DebugCounterPartyLookup.dll" target=" runtimes x64Debug " />
     <file src="..sharedv140binx86ReleaseCounterPartyLookup.dll" target=" runtimes x86Release " />
     <file src="..sharedv140binx86DebugCounterPartyLookup.dll" target=" runtimes x86Debug " />
</files>
  

Связанные документы: папки для конкретной архитектуры и добавление собственных библиотек реализации.

Ответ №2:

Или вы могли бы попробовать другой:

1) создайте файл с именем <package_id>.targets file в папке вашего проекта. На вашей стороне вы должны назвать его как counterpartylookup.targets :

запишите их под ним:

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

2) измените свой файл nuspec:

 <files>
    <file src="..sharedv140binx64ReleaseCounterPartyLookup.dll" target="Referencex64Release" />
    <file src="..sharedv140binx64DebugCounterPartyLookup.dll" target="Referencex64Debug" />
     <file src="..sharedv140binx86ReleaseCounterPartyLookup.dll" target="Referencex86Release" />
     <file src="..sharedv140binx86DebugCounterPartyLookup.dll" target="Referencex86Debug" />
     <file src="counterpartylookup.targets" target="build"/>
</files>
  

3) повторно упакуйте свой проект c , а затем перед установкой нового вы должны удалить все кэши nuget в разделе C:Usersxxx(current user).nugetpackages