我可以在MSDN中看到如何更改C#编译的文件对齐方式(通过项目设置和命令行).
我用谷歌搜索并看到文章解释512字节的文件对齐减少了.dll的大小.我已经使用不同的文件对齐测试了自己,并且看到了,是的,确实如此.
我的问题是:
为什么我要使用不同的文件对齐?必须有这样的场景,或者没有选项吗?
此外,它究竟做了什么?MSDN页面谈论部分?什么是部分?
http://msdn.microsoft.com/en-us/library/0s4tzdf2.aspx
UPDATE
在我自己的调查中,我有谷歌"C#文件对齐",".net汇编文件对齐"等,并最终找到:
https://msdn.microsoft.com/en-us/magazine/bb985992.aspx
它是从2002年开始的,所以我不知道它会有多大帮助.如果有人能让我知道我应该谷歌搜索......
文档简单地说ReadBlock是
"阻止版本的阅读"
但是,这是什么意思?
之前有人问过这个问题,但是,是吧?
http://www.pcreview.co.uk/forums/thread-1385785.php
那个回答的人说
基本上,这意味着您可以依赖StreamReader.ReadBlock返回,直到它读取的次数与您要求的一样多,或者它已到达流的末尾.
我是否正确理解这是必需的,因为Read可能无法为您提供所需的一切?那只是因为它返回0并不意味着你到达文件的末尾?
那么这意味着检查返回的字节数以外的其他内容(EndOfStream?)或使用ReadBlock代替?
我的学习指南(70-536考试)在文章和编码章节中说了两次,这是在IO章之后.
到目前为止,所有示例都与使用FileStream和StreamWriter的简单文件访问有关.
它也说"如果你不知道在创建文件时要使用什么编码,请不要指定一个,.NET将使用UTF16"和"使用Stream构造函数重载指定不同的编码".
没关系,实际的重载是在StreamWriter类上,但是嘿,无论如何.
我现在正在反射器中查看StreamWriter,我确信我可以看到默认情况下是默认的UTF8NoBOM.
但这些都没有在勘误表中列出.这是一本旧书(对两个版本的错误进行了调整)所以如果错了,我会认为有人已经接受了......
让我想起也许我不理解它.
那么.....任何想法,它在说什么?还有其他一些违约的地方?
这让我很困惑.
这些实际上是三个不同的概念还是我变得混乱?(我一直在阅读有关线程和垃圾收集的文章,并让自己感到困惑.)
"关键部分" - 我认为这可能只是您不希望多个线程同时访问的代码段的术语,即内部锁和Monitor.Enter/Exit语句?
"关键区域" - 这里没有真正的线索 - MSDN说的是"这告诉主持人该部分内的异常可能会产生更广泛的影响".并且"CLR的主机,例如Sql Server"可以选择"以不同方式"处理在关键区域内抛出的异常.不同如何?为什么?而且,最重要的是,我需要将代码标记为关键区域的真实场景?
"约束执行区" - 我在阅读垃圾收集文章中的CriticalFinalizerObject时遇到过这种情况.
我在MSDN上可以理解的是,其中一个区域内的代码在某种程度上可以保证运行(但是如何?)因此必须抛出"带外"异常.
什么是out-of-band exception?(我确实谷歌了,但它只是问我是否意味着"超出界限").
是否有任何未处理的例外?或者只是某些类型的例外?而且,最重要的是,在现实世界的情景中,我可能需要一个"受限制的执行区域"?
由于我根本不理解这些概念,我不确定这个问题除了".NET"之外还需要什么标签.
.net critical-section critical-region constrained-execution-reg
我们正在迁移到新域名.更改环境(以及用于TfsConfig identities /change)命令的文档指出在尝试在TFS中迁移用户帐户之前,用户帐户必须不存在于TFS中.
但是,有人进入,因为它们作为测试用例迁移并通过组策略自动添加.
如文档中所述,TfsConfig identities /change此帐户不起作用,因为新帐户已在TFS中.
TfsConfig identities 显示新标识的SID与Windows不匹配.
用户查询都没有工作(当然,因为它是一个新帐户).
更糟糕的是,用户已创建工作项.所以现在有两个独立账户下的工作项目....
我的问题是:我有什么设施来清理这个烂摊子吗?
我希望新标识与Windows匹配,用户工作项在新帐户下合并,所有用户查询工作...
在我理解出了什么问题之前,我发布了这个问题,因为我认为用户查询不起作用的原因是一个简单的查询配置问题.现在我意识到(假设我上面说的任何内容都是正确的)我有更大的问题,可能无法使用可用的命令行工具清理...
更新(对于我们犯同样错误的其他人)
我们昨晚将服务器迁移到新域名.令人高兴的是,SID似乎已经纠正了自己.现在唯一的问题是用户无权访问他们的旧工作项.我可以通过代码更新Created By以外的所有字段.Created By是只读的.这个问题现在只是问:
如何更新工作项的"创建者"字段?
我已经阅读了很多帖子,这些帖子说永远不会直接在TFS数据库中更新数据......但如果我想修复用户查询,这似乎是我唯一的选择......
这是一个与这个引人入胜的问题有关的问题,该问题是在编译时检测除零异常.
从Eric Lippert的回答来看,实现这一点并非易事(我想这就是为什么它没有提供).
我的问题是:
无论语言的"水平"如何,更高级别与更低级别相比,进行这些类型检查的难度是否相同?
具体来说,C#编译器将C#转换为MSIL.作为某种二次通过检查的一部分,这些类型的检查在MSIL级别更容易还是更难?
或者,语言本身是否会产生很小的差异?
阅读Eric的答案中列出的问题,我会假设检查在任何语言中都必须相同?例如,您可以使用许多语言进行跳转,因此需要实现Eric描述的流程检查......?
只是为了保持这个问题的具体,这种检查在MSIL中比在C#中更容易还是更难?
我被要求在我们的CI构建过程中集成StyleCop,方式是:
第一个要求(我还没有完全理解这个要求)是因为我们不想直接在整个解决方案上运行StyleCop.显然,当从VS内部运行StyleCop时,它会忽略指定要忽略的文件的某些属性.因此,如果我们让它在开发机上运行,我们将不断受到成千上万的违规行为的打击,我们还没有准备好应对.所以最重要的是我们希望能够仅在构建服务器上运行它.
我们的构建环境目前包括:
巡航控制>执行msbuild的非任务(通过exec)
nant任务如下:
<target name="buildSolution">
<echo message="Building solution..." />
<exec program="C:\WINDOWS\Microsoft.NET\Framework\v3.5\msbuild.exe"
commandline="${Project.SolutionFile} /t:Rebuild /p:Configuration=${Project.SolutionBuildConfiguration} /v:q" workingdir="." />
</target>
Run Code Online (Sandbox Code Playgroud)
当我第一次看到这个时,我认为以与msbuild执行方式类似的方式执行StyleCop是一个简单的例子.
然而,StyleCop作为一组dll ...
所以这意味着我不能做我想要的......我想......
我今天用Google搜索的所有文章都说"使用StyleCopCmd",由于第三方工具的限制,我也做不到.
我看过这个工具,它似乎实现了一个自定义的nant任务,它启动了StyleCopConsole,挂钩了几个事件并输出了一个格式很好的报告.但是为了能够证明在内部创建任何工具的合理性,我需要能够完全解释为什么我不能在nant配置文件中实现我想要的.或者以任何其他方式不涉及创建或使用工具.理想情况下,如果我不必编写或使用工具,它会更快.
所以我的问题是,这可能吗?
我正在查看我在Reflector中创建的枚举,并且有一个名为"value__"的公共整数字段.
这个会员的目的是什么?
链接或对文档的引用适用于答案.
谷歌搜索是一种痛苦,因为"value__"正在回归"价值".
我一直在寻找近一个小时,只找到下面的链接.其中大多数是不同网站上的同一篇文章.他们都展示了如何通过反射访问成员,但没有一个解释成员的用途.
http://tfl09.blogspot.com/2008/12/enums-enum-values-and-powershell.html
http://www.mail-archive.com/dotnet@discuss.develop.com/msg02431.html
UPDATE
下面的最后一个链接讨论(在底部)你不能使用value__作为枚举值,因为它被重新保留,但没有说明原因.
http://www.vijaymukhi.com/documents/books/csadv/chap3.htm
编译错误
错误CS0076:枚举器名称'value__'是保留的,不能使用...仅对于枚举,它不允许我们使用保留字值___,因为它必须在内部使用相同的字来跟踪枚举.
更新2
下面的链接是MSDN页面,对于编译器错误,也说"value__"是保留的.但仍然没有找到会员所做的事情的快乐....
http://msdn.microsoft.com/en-us/library/e3988xhs(v=vs.71).aspx
我正在努力使用一个合理的逻辑循环来从XML文件中剥离出太大的节点,以便与支持.NET类的XPath一起使用.
我试图用代码执行相同但使用XmTextReader替换我拥有的单行代码(使用XPath查询字符串调用SelectNodes).
我必须通过以前使用的XPath查询(仅供参考)说明几个级别:
ConfigurationRelease/Profiles/Profile[Name='MyProfileName']/Screens/Screen[Id='MyScreenId']/Settings/Setting[Name='MySettingName']
Run Code Online (Sandbox Code Playgroud)
我觉得这很烦人但很简单.但是,我似乎无法让循环正确.
我需要获取一个节点,检查其下的节点以查看该值是否与目标字符串匹配,然后再向下走(如果有)或跳过该分支(如果不匹配).
事实上,我认为我的问题是,如果我没有把它分开,我不知道怎么忽略一个分支.我不能允许它走不相关的分支,因为元素名称不是唯一的(如XPath查询所示).
我以为我可以维护一些布尔值,例如当我点击Profile节点时bool expectingProfileName设置为true.但是,如果它不是我想要的特定配置文件节点,我就无法离开那个分支.
所以...希望这对某人有意义......我一直在盯着这个问题几个小时,可能只是遗漏了一些明显的东西......
我想发布一部分文件,但无法弄清楚结构大致如何:
ConfigRelease > Profiles > Profile > Name > Screens > Screen > Settings > Setting > Name
Run Code Online (Sandbox Code Playgroud)
我将知道ProfileName,ScreenName和SettingName,我需要设置节点.
我试图避免在一次点击中读取整个文件,例如在app启动时,因为其中的一半内容将永远不会被使用.我也无法控制生成xml文件的内容,因此无法更改它来生成多个较小的文件.
任何提示将不胜感激.
UPDATE
我重新打开了这个.一张海报建议XPathDocument应该是完美的.Unfortunatley,我没有提到这是一个移动应用程序,并且不支持XPathDocument.
大多数标准的文件并不大,这就是系统最初被编码为使用XmlDocument的原因.它目前是4MB,显然大到足以在移动应用程序加载到XmlDocument时崩溃.它可能就像它现在出现的那样,因为文件会变得更大.无论如何,我现在正在尝试DataSet建议,但仍然对其他想法持开放态度.
更新2
我有点怀疑,因为有不少人说他们不会指望这么大的文件会让系统崩溃.进一步的实验表明,这是间歇性的崩溃.昨天它每次都崩溃了,但今天早上我重置设备后,我无法重现它.我现在正试图找出一套可靠的生殖步骤.并且还决定了解决问题的最佳方法,我相信它仍然存在.我不能放弃它,因为如果应用程序无法访问此文件,它是无用的,我不认为可以告诉我的用户,当我的应用程序运行时,他们无法在他们的设备上运行任何其他内容... ....
我在ILDASM和Reflector中挖掘,发现:
这个问题告诉我如何找出InternalEquals是如何实现的,即在.cpp类中(或者在CLR中的某个地方).
我的问题是:
ceq成为什么?另一个.cpp类中的另一种方法?即它们是完全不同的代码?因此,虽然==和Equals的默认行为看起来是相同的,但它是不同的代码?
VS2017中的调用堆栈窗口不显示VS2012所在的启动外部代码条目.
我附上了几张屏幕截图来展示我在说什么.
注意:Just My Code已关闭,因为我正在使用符号,所以这不是问题.
我想知道是否有人知道为什么?这不是一个大问题.我只是好奇这些为什么.
当我正在玩加载外部符号时,我注意到了它.一篇文章说,您可以通过右键单击外部代码条目从"调用堆栈"窗口加载符号.但是,我在VS 2017中无法做到这一点,因为缺少参赛作品.
但是,在我加载符号后(通过来自dotPeek符号服务器的模块窗口),我可以查看外部代码条目.
我是.NET中API调用的新手.
我正在查看我想在此处调用的方法的文档
编辑该方法是Windows Mobile API调用.
要调用它,我需要知道它是什么dll以及任何参数标志的值(以及其他东西,但这只是一个例子).
那么我在哪里可以找到它?它不在页面上.它告诉我头文件和标志值的名称,但这对我没有帮助.搜索MSDN会返回对Windows API方法的引用,而不是Windows Mobile API方法.
当然,我猜它是在coredll.dll中.我可以谷歌找到别人写的代码,看看他们是如何做到的.事实上我已经做到了,而且确实在coredll.dll中.
我无法猜出旗帜值.所以我被困在那里,除非我能找到别人的代码,这可能是也可能不对.
所以我的问题是:当然包含dll和标志值是关键信息?所以我应该能够在MSDN的某个地方找到这个信息?
如果我正在查看有关FCL类的页面,它会告诉我该类定义了什么dll,命名空间以及我需要能够使用它的大量其他信息和链接.
信息必须在那里,因为我没有在网上看到这样的任何其他问题?