小编jul*_*gon的帖子

如何在多个解决方案之间共享相同的Resharper设置,无需人工干预?

我们的项目以主解决方案(包含每个项目)和多个包含相关项目分组的小型解决方案进行组织.

我想在每个解决方案中共享相同的Resharper设置,确保开发人员不需要在Resharper中导入配置文件或手动执行任何操作.我们使用的版本是最新版本之一,7.0.1.在TFS中签入的DotSettings文件在单个解决方案中运行良好,但为20-30个解决方案复制相同的文件是禁忌.

有没有办法与整个团队中的每个项目/解决方案共享相同的配置,而开发人员无需明确配置它?理想情况下,应该可以为每个解决方案更改.DotSettings文件的路径,以便在编辑单个.DotSettings文件时,它会自动影响团队中的每个解决方案.

更新:

我已经搜索了一下这个并尝试了两种不同的方法,但它们都没有100%工作:

  • 硬连接使用mklink工具的工作完全在本地,但TFS不支持
  • 正常的快捷方式也是一个合理的解决方案,但Resharper不会读取它们

我在这里没有选择.

更新2:

Daniel Hilgarth提出的解决方案非常有效,但只有在Resharper更新时才能使用.在7.1版本中更正了导致.DotSettings文件在每台计算机上自动签出和编辑的错误.我在更新软件之前和之后对此进行了测试,现在它按预期工作.

有关该错误的更多信息,请访问:

http://youtrack.jetbrains.com/issue/RSRP-288235

.net resharper tfs solution visual-studio

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

如何在使用OWIN的WebApi项目上启用Application Insights服务器遥测?

我们遇到了一堆问题(读取很长的响应时间)和一些正在生产的项目,并希望确切地看到服务器上发生了什么.然后,我按照本文继续将Application Insights添加到我们的所有项目中.问题是我们的两个WebAPI项目都没有将服务器数据发送到Azure门户,而所有其他项目(MVC 5)都是.

这是我在Azure上访问相应的Application Insights刀片时显示的内容:

在此输入图像描述

我尝试在Azure VM中的Application Insights状态监视器中禁用并重新启用数据收集,在向API发出请求时重启IIS几次,但无济于事.当我在MVC项目上启用它时,当我在网站上打开页面时,我几乎可以立即在Azure门户上看到数据.

当我看到我们的Azure VM没有为这些特定项目发送数据时,我尝试在我们的开发环境中设置相同的集合,该环境托管在我们自己的基础架构中,并且完全相同的情况重复出现,排除了可能性这与Azure VM中托管的项目有关.

我不确定是什么阻止这些项目向Azure发送数据,但通过查看工作项目与非工作项目,我认为它可能与我们的WebAPI项目使用新的OWIN这一事实有关管道虽然MVC是标准的MVC项目.我检查了两个项目类型的web.config文件和bin文件夹,它们似乎被Insights Monitor正确修改(我可以看到添加到bin文件夹的相同新dll和添加到Web的相同http模块.配置).

考虑到这一点,如何使用依赖于OWIN/Katana管道的WebAPI项目的Application Insights启用服务器端遥测?在这种情况下,我该怎么做才能找出导致项目无法向Azure发送数据的确切原因?

c# asp.net-web-api owin katana azure-application-insights

17
推荐指数
3
解决办法
9218
查看次数

如何列出 Visual Studio 内给定解决方案的所有项目的所有目标框架?

给定 Visual Studio 中打开的解决方案,如何快速检查解决方案中的各个项目具有哪些目标框架?是否有一个解决方案范围的视图显示每个项目针对哪个目标框架,或者有多少项目针对每个框架版本的聚合视图?

我知道我可以单独检查每个项目(在属性窗口或文件csproj本身上),但是在具有 100 多个项目的解决方案中这是不可行的。

此外,我知道我可能可以csproj在根文件夹中的文件内进行某种正则表达式搜索,但我想知道 Visual Studio 中是否有内置的东西可以提供此数据。

solution visual-studio target-framework

14
推荐指数
1
解决办法
1024
查看次数

限制在C#中访问枚举参数的最佳做法

考虑这个String.Split重载的问题,它以StringSplitOptions枚举作为参数.

Isn't it bad that the enum itself is public and accessible to everything that includes the System namespace? I mean, the enum is completely specific to options of the Split method, yet it's available outside of it's scope.

Perhaps there is a better way to model this, like putting the enum inside the String class itself, and accessing it by using String.SplitOptions for instance? I very rarely see this (I actually can't remember any …

.net c# enums coding-style

11
推荐指数
2
解决办法
637
查看次数

IIS应用程序池中的大量非托管内存.这是正常的吗?

我们试图找出为什么我们在IIS中托管的应用程序耗尽了我们虚拟机上的所有RAM,为此,我下载了一些内存分析工具进行试验.我首先尝试了JetBrains的dotMemory,但很快发现应用程序池进程中的大部分内存都是非托管的,并且dotMemory不是很有用,因为它主要处理托管内存分析.

在此输入图像描述

请注意,池总共使用了221MB,但只管理了19MB的.Net内存.

在使用dotMemory玩弄后,我决定尝试另一种工具,并从RedGate中找到有关ANTS Memory Profiler的信息.

在此输入图像描述

ANTS在应用程序中注入一些东西,它看起来消耗了很多内存,但它仍然显示了一些荒谬的物理内存:

在此输入图像描述

对于一个非常简单的WebAPI项目,这是否可以接受?我们开始注意到我们的虚拟机在几个托管项目中占用了95%到100%的内存,这导致机器速度非常慢.我们已经尝试统一同一应用程序池中的所有4个应用程序,但这只产生了几乎相同的结果:单个池的总内存使用量与所有4个分离的池的总内存使用量相匹配.

从图中可以看出,单独的CLR似乎只占用了80MB的内存.我们如何降低IIS应用程序池的内存使用量?我已经读过将池更改为x86模式确实减少了大量的内存开销并尝试了几分钟,导致一些好的减少到几乎总ram的一半,但即使我这样做我也喜欢要知道为什么这些简单的项目在IIS上吃了这么多内存.

我们正在使用一个仅具有1.7GB RAM的基本Azure虚拟机,运行这4个非常简单的Web应用程序(两个MVC网站和两个WebAPI项目)已经在运行虚拟机.

出于某些奇怪的原因,在我们的本地开发计算机上,池似乎也使用较少量的RAM.此外,似乎根本没有任何内存泄漏,因为在随机点拍摄快照总是产生相同的非常高但是恒定的内存使用量.我们非常小心地处理一次性物品的代码,我们使用FxCop最严格的设置,没有问题.

iis profiling memory-management overhead

11
推荐指数
0
解决办法
1762
查看次数

如何在运行时读取给定项目中的 MSBuild 属性?

我想访问单元测试中的 MSBuild 变量,这是一个 .NET 4.5 类库项目(经典 csproj),但我找不到任何讨论将值从 MSBuild 传递到执行上下文的方法的文章。

我考虑过在编译期间设置环境变量,然后在执行期间读取该环境变量,但这似乎需要自定义任务来设置环境变量值,而且我有点担心变量的范围(理想情况下,我只想它可用于当前正在执行的项目,而不是全局)。

是否有已知的解决方案可以在运行时从 DLL 项目内部读取 MSBuild 属性?MSBuild 属性可以在执行过程中以某种方式“作为参数传递”吗?

c# msbuild parameters .net-4.5

11
推荐指数
1
解决办法
5821
查看次数

MSBuild锁定在构建时生成的T4模板上使用的dll

我在尝试确定为什么MSBuild阻止访问我刚刚创建的新T4模板中使用的dll时遇到了很多麻烦.

这个问题很难解释(甚至可以问,标题很明显).

我创建了一个T4模板来生成ac#类,它是我们拥有的其他N个类的包装器.这是我提出的在同一端点公开多个WCF服务的解决方案.

模板代码本身使用包含各种扩展方法的程序集(Mobiltec.Framework.dll)来简化模板代码.起初,我刚刚将一个.tt文件添加到项目中并继续使用它:每当.tt改变时,它都会按预期更新生成的文件.

由于这个模板读取其他程序集并基于它们生成一个类,我想确保它在每个构建中转换输出,以防止开发人员忘记更新输出和类似的东西.

经过几天的搜索,我终于找到了一个相当不错的解决方案,模板正在每个版本"几乎"完美地转换.问题在于,每当我构建项目并转换模板时,它都会锁定对前面提到的dll的访问,从而阻止我之后删除或更新文件.我必须关闭Visual Studio才能释放该文件.

现在,这对本地开发人员机器来说不是一个大问题,但它在构建服务器上的构建失败,因为那里的输出都在一个文件夹中:

  1. 构建过程开始编译我们的主解决方案
  2. 编译包含T4模板的项目,并生成该类
  3. 编译另一个项目并尝试更改输出文件夹中的dll,尝试10次后失败

这是文本模板系统中的错误还是我可能会犯一些导致文件被锁定的错误?

更新

我会尝试更好地解释一下如何设置所有内容,以便你们可以更好地理解这个问题.

有一个.tt模板文件,每个Web应用程序一个(总共有4个).此模板负责自动为所有WCF服务合同生成包装类.合同本身在另一个程序集中分开(对于四个组件中的每一个也是一个),以便它们可以与客户端共享,而不会携带所有其他依赖项.

我必须实现一组方法来使用反射,每个程序集中的签名,成员和类型进行打印,以生成可以编译为有效类的文本.我在一个通用程序集上实现了这些方法.

然后,每个tt文件引用此公共程序集以及服务契约程序集,以生成此包装类.例如,模板有一堆这样的行:

<#@ assembly name="Mobiltec.M3.EG.Services.dll" #>
<#@ assembly name="Mobiltec.M3.Common.dll" #>
Run Code Online (Sandbox Code Playgroud)

由于我们需要在每个构建中转换这些模板,因此我已经更改了项目文件以启用它并按照此建议安装Visual Studio SDK和Visualization and Modeling SDK .

现在,每当我对任何程序集或其依赖项中的代码进行任何更改时,我都会收到以下消息:

Error   1516    Compiling transformation: Metadata file 'Mobiltec.M3.EG.Services.dll' could not be found. Line=0, Column=0  Mobiltec.M3.EG
Error   1517    Compiling transformation: Metadata file 'Mobiltec.M3.Common.dll' could not be found. Line=0, Column=0   Mobiltec.M3.EG
Run Code Online (Sandbox Code Playgroud)

要么:

Error   395 Could not copy "D:\TFS05\M3\Desenvolvimento\Feature-ODataM3S\ProjetosManutencao\Mobiltec.M3.Common\Mobiltec.M3.Common.Desktop\bin\Mobiltec.M3.Common.dll" to "bin\Mobiltec.M3.Common.dll". Exceeded retry count of …
Run Code Online (Sandbox Code Playgroud)

.net msbuild t4 build tfsbuild

10
推荐指数
2
解决办法
1705
查看次数

我应该缓存RNGCryptoServiceProvider/RandomNumberGenerator实例吗?

我已经阅读了很多次关于Regex类的效率以及调用它的静态方法或缓存正则表达式实例的重要性.

如果我RNGCryptoServiceProvider多次实例化该类而不是缓存该类的单个实例并调用GetBytes它,我想知道是否可以观察到相同的问题.

每次我需要一个随机数时实例化它会简化我的代码,因为我不必担心一次性实例挂起并IDisposable在一堆类中传播一个接口.

我唯一发现的是创建一个RNGCryptoServiceProvider的实例应该非常快,但我仍然希望看到确认,最佳实践是什么.

如果我每次实例化该类而不是使用相同的实例,那么生成的随机数是否也会有任何差异?

.net random performance caching cryptography

10
推荐指数
1
解决办法
748
查看次数

如何使用Microsoft ASP.NET Web API OData中的Delta <T>和Code First\JsonMediaTypeFormatter

有什么问题?

我正在尝试在我的ASP.net web api应用程序中启用修补程序.我正在使用代码第一实体框架.

我有以下方法标题,我可以设置一个断点,它将命中:

[AcceptVerbs("PATCH")]
public async Task<HttpResponseMessage> Patch(long appId, long id, Delta<SimpleFormGroup> formGroup)
Run Code Online (Sandbox Code Playgroud)

但是,当我调用formGroup.Patch(实体)时,不会对我的实体进行任何更改.如果我将以下内容放入即时窗口:

formGroup.GetChangedPropertyNames()
Run Code Online (Sandbox Code Playgroud)

然后这个集合是空的,这似乎是错误的.

我试过了什么?

我一直在提到以下例子

http://techbrij.com/http-patch-request-asp-net-webapi http://www.strathweb.com/2013/01/easy-asp-net-web-api-resource-updates-with-delta /

Json MediaType Formatter似乎不知道如何正确构建Delta对象,但是在第二个链接中,filip似乎表明它应该在没有oDataMediaTypeFormatter的情况下工作.

我已经开始试图将我的模型序列化为EDMX表示,然后从那里提取CSDL以便我可以创建一个oDataMediaTypeFormatter,但我也遇到了障碍,加上它似乎有点矫枉过正.

如果有人能够对此有所了解,那将非常感激.如果需要更多信息,请与我们联系.

编辑:

这是SimpleFormGroup的类定义:

public class SimpleFormGroup
{
    public int LastUpdate;

    public string Identifier;

    public string Title;

    public int DisplayOrder;
}
Run Code Online (Sandbox Code Playgroud)

这是我发送的数据:

Content-Type: 'application/json'

{ "DisplayOrder" : "20 }
Run Code Online (Sandbox Code Playgroud)

谢谢,皮特

c# rest odata asp.net-web-api

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

应该如何正确使用RegisterForEventValidation

我最近开始使用ScriptManager.我有一个ASP.NET DropDownList控件,我通过JavaScript填充.但是,我正在使用事件验证.如果我没有在这里使用"RegisterForEventValidation"调用我的下拉列表,那么我会遇到下面的错误.我如何知道在第二个参数中设置的值(我有"值")?我通过JavaScript填充我的下拉列表,所以我不知道我的代码后面有什么值.我猜测在AJAX部分渲染回发期间调用Render,对吗?或者不是,所以无论我是否正在进行整页回发,都会调用它.我想我不仅希望听到我的问题的答案,而且如果你能与我分享关于下面的错误的经验.我喜欢输入,就像约翰尼#5.

==================

代码背后:

Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)

    Page.ClientScript.RegisterForEventValidation(DDLTest.UniqueID, "value")
    MyBase.Render(writer)
End Sub
Run Code Online (Sandbox Code Playgroud)

==================

错误:

Server Error in '/' Application.
Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order …
Run Code Online (Sandbox Code Playgroud)

asp.net validation ajax events

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