小编Zan*_*son的帖子

项目参考与DLL参考 - 哪个更好?

我知道关于这个问题还有其他问题,我已经看过这个问题了,但是我希望看到更多关于这方面的讨论和信息 - 将项目添加到一个更好的做法解决方案并引用该项目,或者添加对.dll的引用?

reference visual-studio

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

使用参数名称和冒号调用C#方法

我开始注意到,当我在C#中进行方法调用时,我调用的方法的参数名称将显示在附加冒号的intellisense列表中,然后我可以格式化该方法这样打电话:

MethodCall(parameter1:value1, parameter2:value2);
Run Code Online (Sandbox Code Playgroud)

这是一种新的语言功能吗?它让我想起了在SQL中调用存储过程的方式,并指定参数名称,如下所示:

spDoSomeStuff @param1 = 1, @param2 = 'other param'
Run Code Online (Sandbox Code Playgroud)

这是一个类似的功能吗?如果是这样,到底是什么?如果没有,它是什么以及它用于什么.

c# language-features method-call

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

从代码中确定我的进程正在运行的用户

确实没有迫切的理由让我问比其他好奇这个问题 - 使用C#,有没有办法从内部我的进程正在运行作为用户代码,以确定?为了说明使用代码:

static void Main(string[] args)
{
  string userID;
  //what goes here to fill in this userID variable?
  Console.out.WriteLine(string.Format("This process is running as {0}.", userID));
}
Run Code Online (Sandbox Code Playgroud)

c# process

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

使用http和https绑定/端点部署WCF服务

我已经编写了一个WCF Web服务供Silverlight应用程序使用.最初,该服务仅需要基本的http绑定.我们现在需要能够部署服务以在http和https下使用.我找到了web.config的一些设置,允许我按如下方式执行此操作:

<system.serviceModel>
  <behaviors>
    <endpointBehaviors>
      <behavior name="SilverlightFaultBehavior">
        <silverlightFaults />
      </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
      <behavior name="CxtMappingWebService.CxtMappingWebServiceBehavior">
        <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="True" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <bindings>
    <basicHttpBinding>
      <binding name="SecureHttpBinding">
        <security mode="Transport" />
      </binding>
      <binding name="BasicHttpBinding">
        <security mode="None" />
      </binding>
    </basicHttpBinding>
  </bindings>
  <services>
    <service name="CxtMappingWebService.CxtMappingWebService" behaviorConfiguration="CxtMappingWebService.CxtMappingWebServiceBehavior">
      <endpoint address="" bindingConfiguration="SecureHttpBinding" binding="basicHttpBinding" contract="CxtMappingWebService.ICxtMappingWebService" behaviorConfiguration="SilverlightFaultBehavior" />
      <endpoint address="" bindingConfiguration="BasicHttpBinding" binding="basicHttpBinding" contract="CxtMappingWebService.ICxtMappingWebService" behaviorConfiguration="SilverlightFaultBehavior" />
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    </service>
  </services>
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)

然而不幸的是,这有一个问题.

此Web服务需要部署到数百个客户的服务器上,并非所有服务器都使用https.将其部署到未在IIS中设置https绑定的服务器会导致其失败.如果在IIS中没有设置https绑定,是否有办法在web.config中默认使用这两种绑定而不会死亡?

我们已经找到了解决此问题的可能方案,但它并不能很好地满足我们的部署要求.

之前有没有其他人遇到这样的事情,你是怎么解决的?

iis ssl https wcf wcf-binding

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

如何确定字符串是否是有效的变量名?

我正在寻找一种快速方式(在C#中)来确定字符串是否是有效的变量名.我的第一个直觉是鞭打一些正则表达式,但我想知道是否有更好的方法来做到这一点.就像某种秘密方法隐藏在某个名为IsThisAValidVariableName(字符串名称)的地方,或其他一些光滑的方法,这样做不容易出现由于缺乏正则表达能力而可能出现的错误.

c# regex string variables

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

Visual Studio 2022:整个编辑器中的粗体字体

我下载并安装了 Visual Studio 2022。创建一个新项目并使用 IDE 一段时间后,我注意到我的字体大小在编辑器中的所有位置都设置为粗体。关键字、运算符、标点符号、字符串、变量、函数、类,一切!显然我试图改变字体的大小,但它总是恢复为粗体。

我做了什么事情导致了这个吗?如何将其更改为不在所有地方使用粗体字体?

configuration visual-studio visual-studio-2022

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

处理持久性WCF客户端进入故障状态

我们有一个WCF服务,我们正在从Web应用程序中消费.我们使用的客户端是使用Visual Studio"添加服务引用"选项生成的.由于它是一个Web应用程序,并且由于应用程序的性质可能会导致相对较短的会话,因此我们选择在用户登录时创建客户端实例并在会话期间保留它,然后处理会话时处理它.

这让我想到了一个问题 - 我们正试图决定处理客户进入故障状态的渠道的最佳方法.在搜索了一些之后,我们想出了这个:

if(client.State = CommuncationState.Faulted)
{
    client = new Client();
}

try
{
    client.SomeMethod();
}
catch //specific exceptions left out for brevity
{
    //logging or whatever we decide to do
    throw;
}
Run Code Online (Sandbox Code Playgroud)

然而,由于至少在我们的情况下,即使服务停止,客户端将显示Open状态,直到您实际尝试使用它进行呼叫,此时它进入Faulted状态这一事实不起作用..

所以这让我们做了别的事情.我们提出的另一个选择是:

try
{
    client.SomeMethod();
}
catch
{
    if(client.State == CommunicationState.Faulted)
    {
        //we know we're faulted, try it again
        client = new Client();
        try
        {
            client.SomeMethod();
        }
        catch
        {
            throw;
        }
    }
    //handle other exceptions
}
Run Code Online (Sandbox Code Playgroud)

但那闻起来.显然,我们可以通过使用新客户端并为每次调用处理它来避免这种情况.这似乎是不必要的,但如果这是正确的方式,那么我猜这是我们会选择的.那么,优雅地处理确定客户端是否处于故障状态然后对其进行某些操作的最佳方法是什么?我们真的应该为每次通话获得新客户吗?

另外要记住的一点是 - 客户端的实例化以及所有这些检查和处理都发生在客户端的包装类中.如果我们按照我们的预期方式执行此操作,它对应用程序本身是透明的 - …

c# wcf exception-handling channel faulted

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

控制C#中的序列化顺序

我正在使用XmlSerializer序列化对象并将其写入文件.我已经取得了相当大的成功,序列化器在嵌套元素方面做了我想做的事情,以及序列化为元素与属性的内容.不幸的是,我遇到了一个问题,我需要一个类的一个成员在另一个之前序列化.在其他地方,对我来说,无论先声明的是什么,都会先被序列化,但在这种情况下,我并没有取得如此大的成功.有没有办法手动控制事物序列化的顺序?

serialization xmlserializer

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

Visual Studio观察窗口查看对象的大小/内存占用

不确定是否可能,但我很好奇,到目前为止我还没有找到任何运气.我想知道是否有人知道从VS监视窗口中确定内存中对象大小的方法.显然,一个分析器可以做到这一点,但只是从VS中获取这个快速快照是非常方便的.这可能吗?

.net memory visual-studio-2010 visual-studio

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

对于单行if块,使用大括号还是不使用大括号是否更好?

对于if语句之后的单行代码块有什么更好的编码实践 - 大括号还是没有大括号?只是为了避免太多"好吧,这取决于你使用的语言......"答案,让我们说C#.换句话说,哪个更好:

if(somecondition)
{
  singleLineStatement;
}
Run Code Online (Sandbox Code Playgroud)

要么

if(somecondition)
  singleLineStatement;
Run Code Online (Sandbox Code Playgroud)

c# if-statement braces

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

SQL中的全局变量

假设我想创建一个sql脚本并执行以下操作:

DECLARE @SomeVariable int
SET @SomeVariable = 'VALUE'
  FROM someTable
--do stuff with @SomeVariable
GO

CREATE PROCEDURE myProcedure
(
  @MyParameter
)
AS
SET NOCOUNT ON

--Do something
--Do something using @SomeVariable
SET NOCOUNT OFF
RETURN 0
GO
Run Code Online (Sandbox Code Playgroud)

我不能,因为@SomeVariable死于他所属的批次,而myProcedure需要自己的批次.显然我可以创建一个#temp表并填充我需要的任何值,但是我必须从中选择 - 添加代码,尽管是微不足道的,但是当我需要的只是一个全局变量时,它会损害可读性并且看起来很愚蠢.有没有更好的办法?

要痛苦地清楚.我知道SQL Server有"全局变量"称为"表" - 我在上面的段落中提到使用#table是一种可能的解决方案,就像使用实际的永久表一样.我在这里寻找的可能更多的是一个全局常量,我可以在给定的脚本中使用任何地方,而不是全局变量 - 所以我们都可以停止润湿我们的裤子关于全局变量的邪恶.

sql sql-server

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

将用户从自定义表迁移到ASP.NET成员资格表

我正在创建一个新的中间层,我们所有的客户端调用都将通过WCF服务.我们在服务中使用ASP.NET成员身份来验证用户身份.中间层将访问现有数据库,其中我们已经有一个包含用户名和密码的InetUsers表.

这是它开始变得混乱的地方.这个新的中间层将由我们的Web应用程序使用,但不会由我们现有的桌面应用程序使用,这将在我们将来的某个时候重写它 - 使用旧的COM +中间层.Web应用程序的用户管理在桌面应用程序中进行.换句话说,将在桌面应用程序中创建用户并设置和更改密码,而桌面应用程序又会触及现有的InetUsers表.

理想情况下,当我们部署新的中间层时,我们将从InetUsers表中获取所有用户,并在aspnet_Users和aspnet_Membership中为它们创建记录.然后我们将在InetUsers表上设置一个触发器,以使aspnet_Users和aspnet_Membership保持最新状态.

这里有很多问题,所以我会尝试在这里列出所有问题:

  • 这是正确的方法吗?显然在两个地方有这些数据并不理想,但请记住,我不是这里的最终决策者,我们在这里有点遗留一些遗留物,至少目前如此.仍然 - 也许还有更好的方法.
  • 同样,我们会更好地编写自己的成员资格提供者而不是使用SqlMembershipProvider吗?这样做有多难/轻松?
  • 如果我们使用这种方法,我计划将aspnet_Membership_XXXX存储过程用于表的初始填充以及触发器.对此进行了一些研究后,似乎如果我想直接从SQL调用aspnet_Membership_CreateUser(即在触发器中......)而不是使用API​​,我必须存储明文密码,因为我无法得到盐和否则就是哈希吧.这是真的?
  • 这些是否有意义,或者我是否以错误的方式开始?

对所提供的任何帮助表示赞赏.

c# asp.net wcf asp.net-membership

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

清洁财产声明

我正在研究一些代码,用于将Silverlight视图绑定到MVP模式中的演示者.在这种特殊情况下,一遍又一遍地进行这是一个非常长的练习:

模型:

public bool MyBoolean
{
    get { return _myThingy.MyBoolean; }
    set { _myThingy.MyBoolean = value; }
}
Run Code Online (Sandbox Code Playgroud)

主持人:

public bool MyBoolean
{
    get { return _model.MyBoolean; }
    set { _model.MyBoolean = value; }
}
Run Code Online (Sandbox Code Playgroud)

很明显,在这个例子中,演示者可以被废除,但是在这种情况下有一些东西值得同时使用,因为并非每个属性都是这样的,并且我们的编码标准要求具有Model,View和Presenter for每个窗口/页面/用户控件.

我真正的问题是,我真的希望能够做到这样的事情:

模型:

public bool MyBoolean -> _myThingy.MyBoolean;
Run Code Online (Sandbox Code Playgroud)

主持人:

public bool MyBoolean -> _model.MyBoolean;
Run Code Online (Sandbox Code Playgroud)

其中->是"绑定属性运算符"或一些类似的名称 - 基本上是第一位代码的语法糖.有没有这样的东西?如果没有,是否有更清洁的方式来做我正在做的事情?

c# language-design syntactic-sugar

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