首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用CSProj在Visual中编译/CLR:Safe?致命错误LNK1302:仅支持链接安全.netmodules

用CSProj在Visual中编译/CLR:Safe?致命错误LNK1302:仅支持链接安全.netmodules
EN

Stack Overflow用户
提问于 2011-06-17 21:45:30
回答 2查看 3.7K关注 0票数 1

因此,我在转换开放源码项目(SQLite)以使用不同的构建系统时遇到了问题,现在我在链接项目时遇到了问题。本质上,我有一个VCProj文件,其定义如下:

代码语言:javascript
复制
<Tool
   Name="VCLinkerTool"
   AdditionalOptions="/ASSEMBLYRESOURCE:..\System.Data.SQLite\SQLiteCommand.bmp,System.Data.SQLite.SQLiteCommand.bmp&#x0D;&#x0A;/ASSEMBLYRESOURCE:..\System.Data.SQLite\SQLiteConnection.bmp,System.Data.SQLite.SQLiteConnection.bmp&#x0D;&#x0A;/ASSEMBLYRESOURCE:..\System.Data.SQLite\SQLiteDataAdapter.bmp,System.Data.SQLite.SQLiteDataAdapter.bmp"
   AdditionalDependencies="..\System.Data.SQLite\bin\System.Data.SQLite.netmodule"
   OutputFile="..\bin\System.Data.SQLite.DLL"
   GenerateManifest="false"
   IgnoreDefaultLibraryNames=""
   ModuleDefinitionFile="src\sqlite3.def"
   EmbedManagedResourceFile=""
   DelayLoadDLLs="advapi32.dll"
   RandomizedBaseAddress="1"
   DataExecutionPrevention="0"
   ImportLibrary=""
   KeyFile="..\System.Data.SQLite\System.Data.SQLite.snk"
   CLRUnmanagedCodeCheck="true"
/>

由于以下错误,我无法正确链接System.Data.SQLite.netmodule:

连接..。 4>..\System.Data.SQLite\bin\System.Data.SQLite.netmodule :致命错误LNK1302:只支持链接安全.netmodules;无法链接纯.netmodule

System.Data.SQLite.netmodule是从一个C#/.NET项目中生成的。如何强制它使用/clr:safe选项进行编译,因为根据MSDN,这是解决问题的方法。问题是我不知道如何用/clr:safe编译它。我是如何在csproj文件或某个visual中这样做的?如果我试图纠正这个错误,请告诉我一个更好的方法。

更新:所以我已经确定了这个问题,但我不知道为什么是一个问题。因此互操作项目(编译sqlite代码和链接的C项目)使用VCLinkerTool链接到System.Data.SQLite.netmodule。然后有一个C#项目,它使用以下命令创建System.Data.SQLite.netmodule (添加{}中的任何内容以减少长度):

C:\Windows\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /unsafe- /nowarn:1701,1702 /platform:AnyCPU /errorreport:prompt /doc:..\bin\System.Data.SQLite.XML {DLL REFEERENCFES /debug- /filealign:512 /optimize+ /out:obj\Release\System.Data.SQLite.netmodule {RESOURCES AND CS FILES}

问题在于/platform:AnyCPU。在我的构建中,它是/platform:x86,由于某些原因,这会在链接时引起问题,我不知道为什么,但这是我缩小范围的原因,因为我可以将它更改为AnyCPU,并且它将正确地构建和链接。任何有关这方面的洞察力都将受到赞赏。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-23 05:04:52

好的,我终于缩小了问题的范围,也许有人可以把更多的信息传播到为什么,但我对原因有一个粗略的理解。基本上,您不能使用创建的VCLinkerTool链接到.netmodules来获取/platform:x86 (我假设任何其他变量都不是AnyCpu )。我假设这与将混合模式dll与.netmodule链接时在内部进行链接的方式有关。因此,要想使这个项目正常工作,就必须使用C#编译/platorm:AnyCpu项目。

票数 2
EN

Stack Overflow用户

发布于 2011-06-17 21:49:45

可能是您要寻找的内容:

在Visual中设置此编译器选项

  1. 在“解决方案资源管理器”中,右键单击项目名称,然后单击“属性”打开“项目属性页”对话框。
  2. 选择Configuration文件夹。
  3. 在“常规属性”页上,修改“公共语言运行时支持”属性。

备注

当在“属性页”对话框中启用/clr时,也会根据需要调整与/clr不兼容的编译器选项属性。例如,如果设置了/RTC,然后启用了/clr,则/RTC将被关闭。

此外,在调试/clr应用程序时,请将Debugger Type属性设置为“混合”或“托管”。有关更多信息,请参见C++调试配置的项目设置。

有关如何创建模块的信息,请参阅/NOASSEMBLY (创建一个MSIL模块)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6392179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档