我想在 c++/cli 项目中使用托管 nuget 包。有没有办法做到这一点?
比如我的场景差不多是这样的:
我创建了一个 C# 项目(MainProject)并将 EntityFramework nuget 包添加到该项目中。
我又创建了一个 C# 项目(TestCSProject),并添加了 MainProject 作为对该项目的引用。然后自动在引用entityframework中也添加
我创建了一个 C++/CLI 项目(TestCLIProject),并添加了 MainProject 作为对该项目的引用,以便我想看看是否可以使用实体框架。
但那并没有发生。
所以我想知道如何在 c++/cli 项目中使用托管 nuget 包
我们的nupkg包包含相同dll的多个版本(x86,x64,AnyCPU),在csproj文件中,在引用中我使用条件引用来根据当前平台集选择特定的dll.因此,我有多个对同一个库的引用(只是不同的平台编译).
这是我的csproj文件的一个片段:
<Reference Include="xxxx" Condition="'$(Platform)'=='x86'">
<HintPath>..\..\packages\xxxx.2.7.0.1093\lib\net45\x86\xxxx.dll</HintPath>
</Reference>
<Reference Include="xxxx" Condition="'$(Platform)'=='x64'">
<HintPath>..\..\packages\xxxx.2.7.0.1093\lib\net45\x64\xxxx.dll</HintPath>
</Reference>
<Reference Include="xxxx" Condition="'$(Platform)'=='AnyCPU'">
<HintPath>..\..\packages\xxxx.2.7.0.1093\lib\net45\AnyCPU\xxxx.dll</HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)
这种结构在MSBuild和Visual Studio中都能很好地工作.
不幸的是,在nuget更新之后,csproj引用搞砸了.这是结果:
<Reference Include="xxxx" Condition="'$(Platform)'=='x86'">
<HintPath>..\..\packages\xxxx.2.7.0.1093\lib\net45\x86\xxxx.dll</HintPath>
</Reference>
<Reference Include="xxxx" Condition="'$(Platform)'=='x64'">
<HintPath>..\..\packages\xxxx.2.7.0.1093\lib\net45\x64\xxxx.dll</HintPath>
</Reference>
<Reference Include="xxxx">
<HintPath>..\..\packages\xxxx.2.7.0.1094\lib\net45\x86\xxxx.dll</HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)
所以看起来只有一个引用被更新了...... 条件部分被删除以及列表中的第一个dll被使用了.
不是我所期待的.任何想法如何最好地解决这个问题?任何人在你的csproj中使用带有nuget的条件引用?任何建议将不胜感激!