今天,我仔细研究了Visual Studio 2010中程序集引用的"特定版本"属性.经过一些意外结果的实验后,我开始尽可能多地了解该属性的工作原理.即便如此,在我看来,并没有得到所有的答案,所以这是我尝试自我回答这个问题:
如何准确地做在Visual Studio程序集引用作品的"特定版本"属性?
我正在将我的项目从Xcode 4.6.3迁移到Xcode 5.0.2.该项目的单元测试是使用SenTestingKit/OCUnit开发的.现在当我在Xcode 5中运行测试时,我从RunUnitTests
脚本中得到一个错误告诉我
RunUnitTests已过时.
可能相关的是Xcode 5发行说明中的这个注释:
SenTestingKit和OCUnit已弃用.使用迁移器移动到XCTest.
不幸的是,我还没有找到更多关于这个神秘的"迁移者"的信息.可能我的google-fu缺乏[再次],所以我的主要问题是:如何将单元测试从SenTestingKit/OCUnit迁移到新的XCTest(有或没有"迁移器")?
第二个问题,如果迁移是一项复杂的业务:是否有可能让Xcode 5运行仍基于SenTestingKit/OCUnit的单元测试?在所有这些仅仅被弃用之后,它们应该仍然存在并且功能性.
在Windows 7 x64下,当我尝试使用最新版本的Dependency Walker(2.2.6000)分析x86可执行文件时,分析过程始终会挂起.大多数情况下,加载的最后一个DLL是c:\windows\syswow64\URLMON.DLL
,因此似乎该DLL内部的某些内容导致了问题.在Windows 7 x86上分析相同的可执行文件可以完美地运行.
我用Google搜索得非常广泛,但无法找到问题的解决方案.我发现的一个建议是卸载IE 8或IE 9并用IE 7替换它,但这并没有真正帮助.我能观察到的唯一影响是,在IE 7中,分析过程会挂起在不同的DLL上(iertutil.dll
如果我没记错的话,也可以从系统的syswow64
文件夹中找到).
所以我的问题是:如何让Dependency Walker在x64 Windows 7上配置x86应用程序?当然,首先要知道问题存在的原因也很好:-)
最后的一些说明:
在C++/CLI项目中,我在本机C++类中有一个方法,我想检查or 的gcroot
引用.我该怎么做呢?以下所有内容似乎都不起作用:NULL
nullptr
void Foo::doIt(gcroot<System::String^> aString)
{
// This seems straightforward, but does not work
if (aString == nullptr)
{
// compiler error C2088: '==': illegal for struct
}
// Worth a try, but does not work either
if (aString == NULL)
{
// compiler error C2678: binary '==' : no operator found
// which takes a left-hand operand of type 'gcroot<T>'
// (or there is no acceptable conversion)
}
// Desperate, but same result as above …
Run Code Online (Sandbox Code Playgroud) 当文档交互系统将文件传递到iOS应用程序时,该文件的副本将存储在应用程序包的Documents/Inbox
文件夹中.应用程序处理完文件后,显然需要从中删除文件Documents/Inbox
,否则文件夹将继续增长并浪费存储在设备上.
但是,我对这个简单的解决方案(A)感到不舒服,因为我的应用程序需要在完成处理和删除文件之前与用户进行交互.如果用户在此交互期间暂停应用程序,并且该应用程序在后台处理时会被杀死,则应用程序下次启动时将不会删除过时文件.当然,我可以改进我的应用程序以涵盖这种情况,但我怀疑总会有另一个边框案例会让我留下一个"不干净"的Documents/Inbox
文件夹.
因此,优选的解决方案(B)将是Documents/Inbox
在适当的时间移除文件夹(例如,当app正常启动时,即不通过文档交互).我仍然对此感到不舒服,因为我将访问一个文件系统路径,其位置未在任何地方正式记录.例如,如果在iOS的未来版本中,文档交互系统不再放置文件,我的应用程序将会中断Document/Inbox
.
所以我的问题是:
Document/Inbox
?这将是一个非常愚蠢的事情,但我在我的cellForRowAtIndexPath中有这个代码:
if ([self.indexPathSelected compare:indexPath] == NSOrderedSame)
{
NSLog(@" %d %d %d %d", self.indexPathSelected.row, self.indexPathSelected.section, indexPath.row, indexPath.section);
}
Run Code Online (Sandbox Code Playgroud)
这打印:
0 0 0 0
0 0 1 0
0 0 2 0
0 0 3 0
0 0 4 0
0 0 5 0
我原以为它只打印0 0 0 0.
我在这做错了什么?
今天是我第一次尝试 - 并且失败 - 象征着新买的MacBook上的崩溃日志(我们称这台机器为MB1).MB1预装了Mac OS X 10.9.我将跟踪失败符号的问题跟踪到Spotlight没有索引我的任何.dSYM
捆绑包(没有Spotlight索引,Apple的symbolicatecrash
脚本无法找到.dSYM
与崩溃日志匹配的捆绑包).我得出了我的结论,因为
mdfind "com_apple_xcode_dsym_uuids == *"
Run Code Online (Sandbox Code Playgroud)
不打印任何东西,虽然.xcarchive
我的~/Library/Developer/Xcode/Archives
文件夹中有几个包,但它们肯定包含.dSYM
我可以打印的UUID的子包dwarfdump --uuid
.我的.dSYM
项目的构建文件夹(DerivedData
)中也有几个包,但它们都没有被编入索引.
因此,简单易行的问题是:如何告诉Spotlight索引我的.dSYM包?
如果这个简单的问题没有简单的答案,这就是我在MB1上已经尝试过的:
~/Library/Developer/Xcode/Archives
(它们都没问题,文件夹为755,文件为644)mdimport ~/Library/Developer/Xcode/Archives
(没有效果)~/Library/Developer/Xcode/Archives
文件夹(也没有效果)mdutil -s /
是否为卷启用了索引(它是)mdutil -E /
(大概需要10-15分钟,但仍然没有效果)详细说明:在切换到MB1之前,我有一台较旧的MacBook(让我们称之为机器MB2),这是我的开发机器.在MB2上,我从未遇到任何象征性问题.MB2安装了Mac OS X 10.8,而我还在积极开发它,但我最近将MB2升级到Mac OS X 10.9.
今天,mdfind
在MB2上运行仍然给了我很多.dSYM
捆绑包,包括Archives
文件夹和项目的DerivedData
构建文件夹.这些都是来自Mac OS X 10.8天的旧文件,但显然Spotlight在操作系统升级中保留其索引.我认为在创建新文件时看看Spotlight的行为会很有趣,所以我做了以下事情:
mdfind
.这会.dSYM
在DerivedData
构建文件夹中找到中间包. …我创建了一个标签并忘了签名,然后将标签推送到GitHub.是否可以追溯签署该标签,还是必须创建新标签?
我已经阅读了man页面git tag
并搜索了一下,但是没有提出任何线索,可以为已经存在的标签添加签名.
在.rgs文件中,有一些注册表信息,我想知道.rgs文件中的信息如何添加到regetry中?
我有一个项目AAA,它将生成文件AAA.DLL,并有一个文件xxx.rgs包含注册表信息,并建立AAA.DLL,然后它将部署到另一台机器B,所以我不不知道如何在机器B上添加注册信息,我是否需要使用regsvr32命令注册AAA.dll?
我对搜索列表功能感到困惑NSUserDefaults
.类引用说明了standardUserDefaults
它设置由五个域组成的标准搜索列表的类方法.该方法的文档也暗示可以更改此搜索列表(由我添加的粗体):
即使再次调用此方法,对标准搜索列表的后续修改仍然有效 - 只有在第一次调用此方法时,搜索列表才能保证是标准的.
我们还来看看以下文档init
:
返回值:已初始化的NSUserDefaults对象,其参数和注册域已设置.
讨论:此方法不会在搜索列表中放置任何内容.
根据我的理解,这是一个矛盾:搜索列表是空的,或者它包含参数和注册域的条目.
无论如何,我做了一些实验:
NSUserDefaults* standardUserDefaults = [NSUserDefaults standardUserDefaults];
// We get nil, which is expected
NSLog(@"test 1: expecting nil, getting %@", [standardUserDefaults objectForKey:@"foo"]);
NSDictionary* registrationDomainDefaults = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:42] forKey:@"foo"];
[standardUserDefaults registerDefaults:registrationDomainDefaults];
// We get 42, which is expected
NSLog(@"test 2: expecting 42, getting %@", [standardUserDefaults objectForKey:@"foo"]);
[standardUserDefaults removeSuiteNamed:NSRegistrationDomain];
[standardUserDefaults removeVolatileDomainForName:NSRegistrationDomain];
// Here we get 42!
NSLog(@"test 3: expecting nil, getting %@", …
Run Code Online (Sandbox Code Playgroud) ios ×3
.net ×1
atl ×1
c++ ×1
c++-cli ×1
com ×1
git ×1
macos ×1
nsindexpath ×1
objective-c ×1
ocunit ×1
registry ×1
rgs ×1
sign ×1
spotlight ×1
symbolicate ×1
uitableview ×1
xcode ×1
xcode5 ×1
xctest ×1