Questions tagged «c#»

C#(发音为“ See Sharp”)是由Microsoft开发的一种高级,静态类型的多范例编程语言。C#代码通常针对Microsoft的.NET系列工具和运行时,其中包括.NET Framework,.NET Core和Xamarin。使用此标记可解决有关用C#或C#正式规范编写的代码的问题。


18
“复制本地”和参考项目的最佳实践是什么?
我有一个很大的C#解决方案文件(〜100个项目),并且我正在尝试缩短构建时间。我认为“复制本地”在很多情况下对我们来说都是浪费,但我想知道最佳做法。 在我们的.sln中,我们有依赖于程序集B的应用程序A,而程序集B则取决于程序集C。在我们的情况下,有数十个“ B”和少数“ C”。由于这些都包含在.sln中,因此我们正在使用项目引用。当前,所有程序集都内置到$(SolutionDir)/ Debug(或Release)中。 默认情况下,Visual Studio将这些项目引用标记为“ Copy Local”,这导致每个生成的“ B”都将每个“ C”复制到$(SolutionDir)/ Debug中一次。这似乎很浪费。如果我仅关闭“本地复制”,怎么办?其他拥有大型系统的人会做什么? 跟进: 许多响应建议将构建分解为较小的.sln文件...在上面的示例中,我将首先构建基础类“ C”,然后构建大量模块“ B”,然后构建一些应用程序,“一个”。在这个模型中,我需要从B到C的非项目引用。我遇到的问题是“ Debug”或“ Release”被烘焙到提示路径中,并且我最终构建了“ B”的Release版本。针对“ C”的调试版本。 对于那些将构建分为多个.sln文件的用户,您将如何解决此问题?

2
UI Automation的Google Chrome浏览器可访问树缓存问题
当用户在浏览器中向下滚动时,Google Chrome不会刷新可访问性元素(AutomationElement)。 要重现它: 使用"chrome --force-render-accessibility"或通过在上设置全局可访问性启用渲染器可访问 性"chrome://accessibility"。 前往http://en.wikipedia.org/wiki/Google 在UI自动化模式下(从Windows Kits中)打开inspect.exe,查找“到相关文章的链接”元素。 返回Chrome,向下滚动直到底部的“相关文章链接”可见 屏幕上标记了“到相关文章的链接”元素 我找到了一些手动的解决方案,它们可能会迫使Chrome刷新它: 将“缩放”设置为90%,然后将其设置回100%(非常难看) 关闭辅助功能,然后再打开 chrome://accessibility/ 我要寻找的是能够以编程方式执行这些操作之一的功能,或者能够使Chrome刷新其缓存树的任何操作。 我试过的 调整窗口大小 PInvoke/MoveWindow 重绘窗口 PInvoke/Redrawwindow 构建chrome扩展程序,并根据需要强制缩放到100%:(可以chrome.tabs.setZoom(null, 0);工作,但要眨眼并放慢窗口速度) 这些都不正常。 编辑:在Windows 7下使用Google Chrome 40.XX,41.XX,42.XX,43.XX,44.XX,45.XX,46.XX,47.XX.Dev,48.XX.Dev进行了测试。


6
如何将工具提示添加到控件?
ToolTip当鼠标悬停在鼠标上时,我有一些控件想要显示。我怎样才能做到这一点?我想知道如何在代码中以及在设计器中正确地做到这一点(ToolTip工具箱中有一个组件,但我不太了解。) 如果这是重复的,我不会感到惊讶,但是我只能找到在更高级的特定场景下遇到的问题。我想了解基本知识。
154 c#  winforms  tooltip 

15
如何拦截C#中的方法调用?
对于给定的类,我想具有跟踪功能,即,我想记录每个方法调用(方法签名和实际参数值)和每个方法退出(仅方法签名)。 假定以下条件,我如何完成此操作: 我不想将任何第三方AOP库用于C#, 我不想将重复的代码添加到我要跟踪的所有方法中, 我不想更改该类的公共API-该类的用户应该能够以完全相同的方式调用所有方法。 为了使问题更具体,我们假设有3个类: public class Caller { public static void Call() { Traced traced = new Traced(); traced.Method1(); traced.Method2(); } } public class Traced { public void Method1(String name, Int32 value) { } public void Method2(Object object) { } } public class Logger { public static void …
154 c#  reflection  aop 

22
如何检查IEnumerable是否为null或为空?
我喜欢string.IsNullOrEmpty方法。我很想拥有可以为IEnumerable提供相同功能的东西。有吗 也许一些收集助手类?我要问的原因是,if如果状态为,则语句中的代码看起来很混乱(mylist != null && mylist.Any())。拥有它会更清洁Foo.IsAny(myList)。 这篇文章没有给出答案:IEnumerable是否为空?。


6
如何找出使用.NET锁定文件的进程?
我已经看到了有关使用Handle或Process Monitor的几个答案,但是我希望能够在自己的代码(C#)中找出哪个进程正在锁定文件。 我有种讨厌的感觉,我必须在win32 API中摸索一下,但是如果有人已经做到这一点并且可以让我走上正确的道路,我将非常感谢您的帮助。 更新资料 链接到类似问题 如何找出使用C#锁定文件的进程? 命令行工具 跨网络 锁定USB设备 单元测试因文件锁定而失败 删除锁定的文件
154 c#  file-locking 

4
为什么以及如何避免事件处理程序内存泄漏?
通过阅读关于StackOverflow的一些问题和答案,我才意识到,+=在C#中使用事件处理程序(或者,我猜是其他.net语言)会导致常见的内存泄漏。 过去,我多次使用过这样的事件处理程序,但从未意识到它们会导致或导致应用程序中的内存泄漏。 这是如何工作的(意味着,为什么这实际上会导致内存泄漏)? 我该如何解决这个问题?使用-=同一事件处理程序是否足够? 是否存在处理此类情况的通用设计模式或最佳实践? 示例:我应该如何处理具有许多不同线程的应用程序,并使用许多不同的事件处理程序在UI上引发多个事件? 在已经构建的大型应用程序中,是否有任何简便的方法可以有效地对此进行监视?


8
C#-如何在Windows 64位上获取程序文件(x86)
我正在使用: FileInfo( System.Environment.GetFolderPath( System.Environment.SpecialFolder.ProgramFiles) + @"\MyInstalledApp" 为了确定是否在用户计算机上检测到程序(这不是理想选择,但是我正在寻找的程序是MS-DOS应用程序的正确选择,我想不出另一种方法)。 在Windows XP和32位版本的Windows Vista上,此功能正常。但是,在x64 Windows Vista上,代码返回x64程序文件文件夹,而应用程序安装在程序文件x86中。有没有一种方法可以通过编程方式将路径返回到x86程序文件,而无需硬接线“ C:\ Program Files(x86)”?
153 c#  windows  file  64-bit 

7
MVC 3:如何通过Ajax加载没有其布局页面的视图?
我正在学习渐进增强功能,并且对AJAXifying视图有疑问。在我的MVC 3项目中,我有一个布局页面,一个viewstart页面和两个纯视图。 viewstart页面位于Views文件夹的根目录中,因此适用于所有视图。它指定所有视图均_Layout.cshtml应用于其布局页面。布局页面包含两个导航链接,每个视图一个。链接用于@Html.ActionLink()将自身呈现到页面。 现在,我添加了jQuery,并希望劫持这些链接,并使用Ajax在页面上动态加载其内容。 <script type="text/javascript"> $(function () { $('#theLink').click(function () { $.ajax({ url: $(this).attr('href'), type: "GET", success: function (response) { $('#mainContent').html(response); } }); return false; }); }); </script> 我可以想到两种方法来执行此操作,但是我并不特别喜欢其中一种: 1)我可以获取整个View的内容并将它们放在局部视图中,然后在渲染时让主视图调用局部视图。这样Request.IsAjaxRequest(),我就可以在控制器中使用,根据请求是否为Ajax请求来返回View()或返回PartialView()。我无法将常规视图返回到Ajax请求,因为那样它将使用布局页面,并且我将获得注入的布局页面的第二个副本。但是,我不喜欢这样,因为它迫使我创建一个空视图,其中只包含一个@{Html.RenderPartial();}用于标准GET请求的视图。 public ActionResult Index() { if (Request.IsAjaxRequest()) return PartialView("partialView"); else return View(); } 然后在Index.cshtml中执行以下操作: @{Html.RenderPartial("partialView");} 2)我可以从_viewstart中删除布局名称,并在请求不是Ajax时手动指定它: public ActionResult Index() { …

12
使用NuGet软件包管理器控制台时无法访问源
我们正在将包管理从手动更新文件转移到NuGet。我正在尝试安装较旧版本的软件包,以匹配我们在源代码管理中已经拥有的版本。无法从用户界面执行此操作,因此我使用命令行来获取正确的版本。 出于某种原因,请Install-Package继续告诉我nuget gallery无法访问。 nuget.org [ https://www.nuget.org/api/v2/]上的源不可访问。退回到NuGet本地缓存 这仅在我们的一种解决方案中发生。如果我创建一个新解决方案或在同一存储库中使用另一个解决方案,则程序包将按预期安装。我什至可以将软件包安装在虚拟解决方案中,以填充本地缓存,然后将它们成功安装在故障解决方案中。我尝试Invoke-WebRequest从NuGet控制台访问url,并获得HTTP 200。 是什么原因造成的?有没有一种方法可以按每个解决方案/项目覆盖程序包源?

10
为什么专用字段专用于类型而不是实例专用?
在C#(和许多其他语言)中,访问相同类型其他实例的私有字段是完全合法的。例如: public class Foo { private bool aBool; public void DoBar(Foo anotherFoo) { if (anotherFoo.aBool) ... } } 正如C#规范(第3.5.1节,第3.5.2节)所述,对私有字段的访问是基于类型而不是实例。我一直在与一位同事讨论这个问题,我们正试图提出一个使其如此工作的原因(而不是限制对同一实例的访问)。 我们能想到的最好的参数是进行相等性检查,其中类可能要访问私有字段以确定与另一个实例的相等性。还有其他原因吗?还是某些绝对地意味着它必须像这样工作的黄金原因,否则将完全不可能?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.