问题列表 - 第3749页

InternalsVisibleTo不适用于托管C++

InternalsVisibleTo不适用于我的托管C++项目,但它适用于我的C#项目.任何帮助,将不胜感激.这是一个简化的布局.

项目A - C#,具有我想从B/C访问的内部属性.
项目B - 托管C++.引用一个.
项目Ç - C#,引用一个.

所有项目都使用相同的密钥签名.使用ILDASM或Reflector查看已编译的程序集,表明它们都已正确签名(当我注释掉内部属性用法时).

在Project A的 AssemblyInfo.cs中,我有以下InternalsVisibleTo;

[assembly: InternalsVisibleTo( "B, " +
   "PublicKey=00240000048000009400000006020000002400005253413100040000010001007" +
   "50098646D1C04C2A041FAAF801521A769535DE9A04CD3B4DEDCCBF73D1A6456BF4FE5881451" +
   "0E84983C72D0460B8BA85C52A9CACDC4A0785A08E247C335884C2049ECFE6B2C5E20A18FE4B" +
   "9BFF009ADA232E980D220B3C9586C9C5EE29C29AEE8853DB7BB90CF5A4C704F5244E1A1085C" +
   "4306008535049A0EBB00FE47E78DCB" )]

[assembly: InternalsVisibleTo( "C, " +
   "PublicKey=00240000048000009400000006020000002400005253413100040000010001007" +
   "50098646D1C04C2A041FAAF801521A769535DE9A04CD3B4DEDCCBF73D1A6456BF4FE5881451" +
   "0E84983C72D0460B8BA85C52A9CACDC4A0785A08E247C335884C2049ECFE6B2C5E20A18FE4B" +
   "9BFF009ADA232E980D220B3C9586C9C5EE29C29AEE8853DB7BB90CF5A4C704F5244E1A1085C" +
   "4306008535049A0EBB00FE47E78DCB" )]
Run Code Online (Sandbox Code Playgroud)

钥匙被'切',所以我知道它们是正确的.

当我尝试编译时,A&C编译正常,但项目B失败了

Error 1 error C3767: 'A::MyClass::MyProperty::get': candidate function(s) not accessible c:\Users\<snip>\CppClass.cpp 201 B
Run Code Online (Sandbox Code Playgroud)

MSDN文档说这适用于C++.我需要做一个bug还是别的什么?

是否有另一种方法可以保护财产,使其只能由我签署的集合使用?我知道我可以保护我的所有组件,但是我可以在这样的粒度级别上进行吗?

编辑

根据MSDN中的注释,我将属性更改为以下内容,但仍然无效.

[assembly: InternalsVisibleTo( "B, " + …
Run Code Online (Sandbox Code Playgroud)

.net c++-cli internalsvisibleto

12
推荐指数
1
解决办法
2721
查看次数

如何在C或C++中获取/链接外部函数?

编辑: 我想我应该澄清,如果重要的话.我在AIX Unix机器上,所以我使用的是VAC编译器 - 没有gnu编译器. 结束编辑


我在C/C++中相当生疏,所以如果这是一个简单的问题,请原谅我.

我想从我的一些C程序中获取常用函数,并将它们放在共享库或共享对象中.如果我在perl中这样做,我会将我的sub放在perl模块中,并在需要时使用该模块.

为了举个例子,假设我有这个功能:

int giveInteger()
{
    return 1034;
}
Run Code Online (Sandbox Code Playgroud)

显然这不是一个真实世界的例子,但如果我想分享这个功能,我将如何进行?

我很确定我有两个选择:

  1. 将我的共享函数放在一个文件中,并在编译时使用我的主程序进行编译.如果我对共享功能进行了更改,我将不得不重新编译我的主程序.
  2. 将我的共享函数放在一个文件中,并将其编译为共享库(如果我的条款正确),并将我的主程序链接到该共享库.我对共享库所做的任何更改(在编译之后)都会在运行时集成到我的主程序中,而无需重新编译我的主程序.

我对这个想法是否正确?

如果是这样,我怎样才能完成这两种方法中的任何一种/两种方法?我搜索了很多,我似乎找到了如何将自己的程序链接到其他人的共享库的信息,但不知道如何创建我自己的共享函数并以我可以在我自己的程序中使用它们的方式编译它们.

非常感谢!

布赖恩


编辑:

结论

谢谢大家的帮助!我想我会在这篇文章中添加什么对我有用(对于AIX上的动态共享库),以便其他人可以受益:

我编译我的共享函数:

xlc -c sharedFunctions.c -o sharedFunctions.o
Run Code Online (Sandbox Code Playgroud)

然后使它成为共享对象:

xlc -qmkshrobj -qexpfile=exportlist sharedFunctions.o
xlc -G -o libsharedFunctions.so sharedFunctions.o  -bE:exportlist
Run Code Online (Sandbox Code Playgroud)

然后链接另一个程序:

xlc -brtl -o mainProgram mainProgram.c  -L. -lsharedFunctions
Run Code Online (Sandbox Code Playgroud)

另一条评论帮助我找到了这个链接,这也有所帮助:http: //publib.boulder.ibm.com/infocenter/comphelp/v7v91/topic/com.ibm.vacpp7a.doc/proguide/ref/compile_library.htm

再次感谢所有帮助我的人!

c c++ shared-libraries

3
推荐指数
1
解决办法
1万
查看次数

当我有LINQ to SQL时,为什么需要存储过程

我对Linq to Sql的理解是它将采用我的Linq语句并将其转换为等效的SQL语句.

所以

var products = from p in db.Products
               where p.Category.CategoryName == "Beverages"
               select p
Run Code Online (Sandbox Code Playgroud)

刚刚变成

Select * from Products where CategoryName = 'Beverages'
Run Code Online (Sandbox Code Playgroud)

如果是这种情况,我不会看到存储过程如何有用.

.net c# linq stored-procedures linq-to-sql

13
推荐指数
7
解决办法
3067
查看次数

如何进行大规模重命名?

我需要重命名这样的文件名

transform.php?dappName=Test&transformer=YAML&v_id=XXXXX
Run Code Online (Sandbox Code Playgroud)

就是这样

XXXXX.txt
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

我知道我需要多个mv命令,因为它们至少有25000个文件.

unix shell rename

25
推荐指数
4
解决办法
2万
查看次数

C#字符串比较:CurrentCultureIgnoreCase和InvariantCultureIgnoreCase之间的差异

在C#中进行字符串比较时,执行a之间的区别是什么

string test = "testvalue";
test.Equals("TESTVALUE", StringComparison.CurrentCultureIgnoreCase);
Run Code Online (Sandbox Code Playgroud)

string test = "testvalue";
test.Equals("TESTVALUE", StringComparison.InvariantCultureIgnoreCase);
Run Code Online (Sandbox Code Playgroud)

......无论如何,包含额外参数是否重要?

c# string comparison

33
推荐指数
2
解决办法
3万
查看次数

SVN只导出标签中已更改的文件

有谁知道如何使用svn从两个标签中仅导出更改的文件?

让我们说我有标签1.0,然后修复后备箱中的错误.接下来我准备好发布一个新的补丁,所以我将其标记为1.1.现在我想在标签1.0和1.1之间导出已更改的文件.这可能吗?

svn

6
推荐指数
4
解决办法
2万
查看次数

在子站点之间共享Sharepoint列表

我有一种情况,我希望在Sharepoint站点的顶层有一个主列表,然后允许子站点查看主列表.我尝试过使用内容类型,要么我很慢而且无法获得概念,要么它似乎不适用.

有人有运气吗?

sharepoint sharepoint-2007

1
推荐指数
1
解决办法
2万
查看次数

73
推荐指数
8
解决办法
17万
查看次数

我如何回读Data :: Dumper的输出?

假设我使用Data::Dumper以下行创建了一个文本文件:

my $x = [ { foo => 'bar', asdf => undef }, 0, -4, [ [] ] ];
Run Code Online (Sandbox Code Playgroud)

我想把这个文件读回来然后$x回来.我试过这个:

my $vars;
{
  undef $/;
  $vars = <FILE>;
}

eval $vars;
Run Code Online (Sandbox Code Playgroud)

但它似乎没有用 - $x不仅没有定义,当我尝试使用它时,我得到一个警告

全局符号$ x需要显式包名称.

这样做的正确方法是什么?(是的,我知道它很难看.它是一个快速的实用程序脚本,而不是一个生命支持系统.)

perl persistence data-dumper

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

您可以更改客户端登录到哪个subversion存储库吗?

在我的笔记本电脑上,我在使用tortoise svn访问我的svn存储库(例如svn:// computername/repository)时使用计算机的名称.但是,当我在网络之外时,我需要使用Internet可寻址名称(例如svn://computername.dyndns.com/repository).我想继续这样做,这样当我在家时,我的签到和更新尽可能快,并且不依赖于另一台服务器正在运行(dyndns).有没有办法使用我已经签出的相同文件夹结构,只是来回更改名称?

svn tortoisesvn

0
推荐指数
1
解决办法
821
查看次数