相关疑难解决方法(0)

如何将共享C#NuGet依赖项添加到C++/Cli项目?

上下文:具有2个程序集,Cs和Cpp的Visual Studio解决方案.

  • Cs是C#/ .net45 dll
  • Cpp是一个C++/Cli dll,一个用/ clr编译的C++ DLL.

我有一些来自nuget.org的纯C#项目的依赖项.我使用作者提供的原始包.将它们添加到Cs项目工作正常,但不是Cpp.

如何将C#包添加到C++项目中?

因为它是C++/Cli,所以我可以很容易地使用.net对象,并且我在C#库中使用例如来自C#库的东西.但不知何故nuget只允许我选择C#项目来添加C#依赖,而不是C++/clr.

.net c# c++-cli nuget visual-studio-2012

18
推荐指数
1
解决办法
4576
查看次数

为C++/CLI(混合)程序集创建NuGet包

我创建了一个C++/CLI(混合)程序集,它有一个围绕某些非托管C++代码的托管包装类.托管部分以.NET 4.6.1为目标,我得到了一个entry.cpp只有这一行的文件来做到这一点:

[assembly:System::Runtime::Versioning::TargetFrameworkAttribute(L".NETFramework,Version=v4.6.1", FrameworkDisplayName = L".NET Framework 4.6.1")];
Run Code Online (Sandbox Code Playgroud)

当我现在在.NET 4.6.1项目中手动包含已编译的程序集时,我可以按预期使用托管类.

该项目可以构建四种方式:x86x64作为调试发布版本.它没有托管依赖项.

现在我想要一个(或者如果需要多个)NuGet包,我可以上传到我的feed并在我想要的每个.NET 4.6.1兼容项目中轻松使用包装器组件.我该如何实现这一目标?


到目前为止我尝试了两种方法:

首先,我创建了一个.autopkg文件,根据这篇博文文章提供本机DLL的方式.该files文件的部分如下所示:

files {
  // include: { *.h }; 
  [x86,v120,release] {
     symbols: { ..\Release\*.pdb; }
     bin:     { ..\Release\*.dll; }
  };
  [x86,v120,debug] {
     symbols: { ..\Debug\*.pdb; }
     bin:     { ..\Debug\*.dll; }
  };
};
Run Code Online (Sandbox Code Playgroud)

此过程会生成三个.nupkg文件,我可以将其上传到我的Feed.但是当我尝试将该软件包安装到.NET 4.6.1项目时,我收到以下错误消息:

无法安装包'MyCppCliWrapper.redist 1.0.0.2'.您正在尝试将此软件包安装到以".NETFramework,Version = v4.6.1"为目标的项目中,但该软件包不包含任何与该框架兼容的程序集引用或内容文件.有关更多信息,请与软件包作者联系.


所以我重新考虑是否应该使用托管程序集的方式来创建,.nupkg因为程序集有一个我想从托管代码中使用的托管类.我创建了一个.nuspec(使用nuget spec)并提供了元数据.然后我尝试像这样创建我的包:

nuget pack …
Run Code Online (Sandbox Code Playgroud)

c++-cli nuget

9
推荐指数
1
解决办法
3186
查看次数

在非托管 C# .NET 库项目中使用 NuGet 库

我正在为名为 BIM Vision 的软件创建插件。他们有一个 C API 的包装器,因此我使用 UnmanagedExports 来让我的非托管 DLL 与包装器一起编译得很好。

问题是我根本无法在我的项目中使用 NuGet 库。它们编译得很好,但在我的代码中调用它们的任何函数都会使软件崩溃。

所有的库都与我自己的 DLL 一起编译在它们自己单独的 DLL 中。软件只能加载我的 DLL(因为其他 DLL 错过了与 BIMVision 对话的代码)

如何让软件找到丢失的 DLL?我应该把它们放在哪里?

我的 .csproj 看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
    <PropertyGroup>
        <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
        <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
        <ProjectGuid>{362E40F4-4A37-48B3-A7A5-93E5535A9B22}</ProjectGuid>
        <OutputType>Library</OutputType>
        <AppDesignerFolder>Properties</AppDesignerFolder>
        <RootNamespace>ExcelLink</RootNamespace>
        <AssemblyName>ExcelLink</AssemblyName>
        <TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
        <FileAlignment>512</FileAlignment>
    </PropertyGroup>
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
        <DebugSymbols>true</DebugSymbols>
        <DebugType>full</DebugType>
        <Optimize>false</Optimize>
        <OutputPath>C:\Users\Daniel\Documents\SAMT\BIMVISION SDK\bim_vision_exe\plugins</OutputPath>
        <DefineConstants>DEBUG;TRACE</DefineConstants>
        <ErrorReport>prompt</ErrorReport>
        <WarningLevel>4</WarningLevel>
        <PlatformTarget>x86</PlatformTarget>
    </PropertyGroup>
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' …
Run Code Online (Sandbox Code Playgroud)

.net c# unmanagedexports

6
推荐指数
1
解决办法
262
查看次数

Nuget不会将Entity Framework安装到C++/CLI项目中

我认为这个问题已得到修复.我正在使用Visual Studio 2013,它是Entity Framework 6.1.我收到错误消息:PublicKeyToken = xxxxxx未标记为可序列化.

我以为这是固定的.它是否再次被打破,如果是这样,是否有解决方法?

谢谢.

尝试安装到win32 C++控制台应用程序时,这是完整的错误消息.(使用默认设置构建,没有其他内容添加到新版本.)错误:在程序集'Microsoft.VisualStudio.Project.VisualC.VCProjectEngine,Version = 12.0.0.0,Culture中键入'Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCProjectShim' =中性,PublicKeyToken = b03f5f7f11d50a3a'未标记为可序列化.

尝试安装到C++ CLR时,这是完整的错误消息:(实际上,它是完全相同的错误消息.)

尝试安装到常规空C++项目时,这是完整的错误消息:(同样,错误消息相同.)

entity-framework c++-cli visual-studio

4
推荐指数
1
解决办法
4879
查看次数