2014-12-03 134 views
1

我想使用SharpDX库,我必须自己编译源代码。 我可以使用Net40配置轻松地从他们的GitHub编译最新的源代码。 现在我想用编译后的项目在我自己的项目,我发现下面这样做: https://github.com/sharpdx/SharpDX/issues/379使用从源代码编译的SharpDX?

这导致我做以下步骤:

  • 下载并解压SharpDX源代码为“./SharpDX”
  • 打开文件“./SharpDX/SharpDX.sln”
  • 建立在配置管理与配置Net40的SharpDX源代码
  • 与以下内容创建文件 “./MyProject/Common.targets”:

    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
        <PropertyGroup> 
        <!-- set the location of SharpDX source code --> 
        <SharpDXLocation Condition="'$(SharpDXLocation)' == ''">..\SharpDX</SharpDXLocation> 
        <!-- the new property to include references automatically (as it was in old SharpDX.targets) --> 
        <SharpDXIncludeReferences>true</SharpDXIncludeReferences> 
        <!-- (optional) override DirectX version --> 
        <SharpDXDirectXVersion>DirectX11</SharpDXDirectXVersion> 
        <!-- disable usage of signed assemblies, as you won't have the needed private key to build them --> 
        <SharpDXNoSigned>true</SharpDXNoSigned> 
        </PropertyGroup> 
    
        <Import Project="$(SharpDXLocation)\Build\SharpDX.targets" /> 
        <Import Project="$(SharpDXLocation)\Build\SharpDX.Toolkit.targets" /> 
    </Project> 
    
  • 与以下内容创建文件 “./MyProject/SharpDXHelper.csproj”:

    <?xml version="1.0" encoding="utf-8"?> 
    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="BuildTarget"> 
        <Import Project="Common.targets" /> 
        <Target Name="BuildTarget"> 
         <Message Text="Building command for SharpDXHelper" Importance="high" /> 
        </Target> 
        <Target Name="Rebuild"> 
         <Message Text="Rebuilding command for SharpDXHelper" Importance="high" /> 
        </Target> 
        <Target Name="Clean"> 
         <Message Text="Cleaning command for SharpDXHelper" Importance="high" /> 
        </Target> 
    </Project> 
    
  • 打开文件“.MyProject/SharpDXHelper.csproj”与Visual Studio。

如果我展开“参考”的“./MyProject/SharpDXHelper.csproj”的一部分,我看到一个警告图标所需的参照,该警告是这样的:

警告13找不到引用的组件'SharpDX'。 SharpDXHelper

我不明白我做错了什么,为什么它没有找到正确的组件? 我意识到“Toolkit”部分已经消失,我期望那些加载失败,但我不希望其他人失败。

据我的理解,如果我将SharpDXHelper.csproj作为依赖添加到其他任何项目中,我应该能够毫无问题地使用SharpDX库,我对这个问题正确吗?

所产生的问题的图像可以在这里找到: http://puu.sh/dfmP4/c6ac1165ed.png

回答

0

据我了解,我应该能够使用SharpDX库没有问题,如果我添加“SharpDXHelper.csproj”作为一个依赖到任何其他项目,我对这个是否正确?

不是。

被引用的项目不被评估为导入的项目(使用导入任务)。

  • 引用从项目A1项目B1:项目B1被认为是可分离和编译项目。所有由B1定义的属性和目标在A1中不可见。
  • 将项目B1导入A1就像将项目B1内联到A1中一样。在B1中定义的所有属性和目标是在A1可见(并覆盖被列入点之前定义的所有内容)

这就是为什么我们使用“.targets”扩展为引进项目,从引用的项目区分开来的理由。

尽管可能开发出这样一个被引用的项目B1,它可以在编译A1时被A1复制到本地,但是这需要深入了解.NET/C#引用的项目如何获得交叉引用,编译为了做到这一点。这是可行的,但发展是一个相当大的挑战。

我建议你坚持使用导入解决方案。

+0

我接受了您的建议,并将添加到了现有的项目文件中,并且违背了我的预期,它实际上起作用了。当然,如果没有Toolkit API,应该可能会在某个时候更新。无可否认,我添加了导入的项目文件是为了与NuGet(我拿出的)一起工作而设计的,所以这可能有助于解决这个问题。当我再次醒来时,我将看到_why_它与该项目文件一起工作,而不是与我所做的那个一起工作。 – ManIkWeet 2014-12-03 22:24:36