小编Wel*_*.59的帖子

正则表达式从C#剥离行注释

我正在编写一个例程来从一些C#代码中删除块行注释.我查看了网站上的其他示例,但没有找到我正在寻找的确切答案.

我可以使用这个正则表达式与RegexOptions.Singleline完全匹配块注释(/*comment*/):

(/\*[\w\W]*\*/)

我可以使用RegexOptions.Multiline的正则表达式完整地匹配行注释(//注释):

(//((?!\*/).)*)(?!\*/)[^\r\n]

注意:我正在使用[^\r\n]而不是$因为$包括\r在比赛中.

然而,这并不十分工作,我希望它的方式.

这是我正在匹配的测试代码:

// remove whole line comments
bool broken = false; // remove partial line comments
if (broken == true)
{
    return "BROKEN";
}
/* remove block comments
else
{
    return "FIXED";
} // do not remove nested comments */ bool working = !broken;
return "NO COMMENT";
Run Code Online (Sandbox Code Playgroud)

块表达式匹配

/* remove block comments
else
{
    return "FIXED";
} // do not …
Run Code Online (Sandbox Code Playgroud)

.net c# regex

40
推荐指数
3
解决办法
4万
查看次数

为什么CenterToScreen方法将窗体置于光标所在的屏幕上,而不是带有焦点应用程序的屏幕?

我使用的是Visual Studio 2010,C#.NET 4,WinForms.我的电脑有2台显示器.

当我调用CenterToScreen表单的方法时,表单将自己置于光标所在的任何屏幕上.有谁知道为什么?

c# .net-4.0 winforms

16
推荐指数
1
解决办法
9756
查看次数

使用邮件安全性的WCF路由

我有一个带有Message Security 身份验证的WCF服务.

我想为负载平衡设置路由服务.

由于某种原因,它不起作用,我已启用includeExceptionDetailInFaults来查看异常,所以在客户端我看到:

未提供客户端证书.在ClientCredentials中指定客户端证书.

似乎证书不是从router-> service转发的.

目前客户端/路由器/服务在同一台机器上,所以我拥有所有证书,但是如果我将它们部署在不同的机器上,那么路由器必须拥有私钥吗?

另外,如果我想在路由器和服务之间建立非安全连接(卸载安全性),我该如何提供调用者的身份?

编辑:对于所有客户端/路由器(服务器和客户端)/服务器,安全性配置相同:

            <security mode="Message">
                <message clientCredentialType="Certificate" negotiateServiceCredential="false"
                    algorithmSuite="Default" establishSecurityContext="false" />
            </security>
Run Code Online (Sandbox Code Playgroud)

wcf wcf-routing wcf-security

16
推荐指数
1
解决办法
1298
查看次数

Visual Studio的.vsmdi文件有多重要?

这是场景:

"用户A"已通过Visual Studio 2010创建了单元测试.测试项目和单元测试源代码已经过检查到版本控制.'用户B'从版本控制中获取测试项目和单元测试源代码.然后'用户B'打开测试项目并收到一条消息"加载blah.blah.blah.vsmdi错误:找不到输入文件:blah.blah.blah.vsmdi".但是,'用户B'仍然可以成功运行单元测试.

现在,无论"用户A"是否应该检入.vsmdi文件,除了错误消息之外,似乎没有任何负面影响.

没有.vsmdi文件有什么危害吗?或者,相反,拥有.vsmdi文件有什么好处?

unit-testing visual-studio-2010 visual-studio

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

如何从字符串更新/替换XElement的元素?

所以这是我的情况.

我有一个XElement,让我们称之为root,它有后代,有后代等.我使用LINQ to XML拉一个后代,使用.ToString()并编辑它将它加载到备忘录编辑器中.现在我想用编辑后的版本更新/替换原始的后代元素.

让我提一下,这是一个简单的XML文件,没有架构,没有使用DOM等.我只需要能够编辑和更新/替换元素.

这是我的XML的模型:

<Root>
  <Genre Name="Rock">
    <Artist Name="Pink Floyd">
      <BandMembers>
        <Member>Nick Mason</Member>
        <Member>Syd Barret</Member>
        <Member>David Gilmour</Member>
        <Member>Roger Water</Member>
        <Member>Richard Wright</Member>
      </BandMembers>
      <Category>Favorite band of all time</Category>
    </Artist>
    <Artist Name="Led Zepelin">
      <Category>Love the band</Category>
    </Artist>
  </Genre>
  <Genre Name="Blues">
    <Artist Name="Muddy Waters">
      <Instrument>Harmonica</Instrument>
    </Artist>
    <Artist Name="Howling Wolf">
      <Instrument>Guitar</Instrument>
    </Artist>
  </Genre>
</Root>
Run Code Online (Sandbox Code Playgroud)

现在说我要编辑"Pink Floyd"元素来纠正Roger Waters的姓氏.我获取该元素,将其转换为字符串,将其加载到我的编辑器中,进行我想要的更改,然后使用它将其转换回XElement .Parse().

现在,如何在原始XML中更新/替换"Pink Floyd"节点?

xml visual-studio-2010 c#-4.0

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

当我的所有.XSD存储为资源时,如何解析.XSD的schemaLocation属性?

我正在开发一个项目,我需要根据嵌套的XSD生成XML文件.例如,ORDER引用了PERSON,PERSON引用了ADDRESS等.

我正在创建一个`XmlReaderSettings'实例来验证XSD,并在生成后验证XML.

我已将XSD作为资源添加到我的程序集中.然后,我XmlSchema为每个资源创建一个实例,从最低到最高,并将其添加到XmlReaderSettings.Schemas集合中.

但是,尝试添加引用另一个架构的架构时失败.我得到一个XmlSchemaException:"对于元素声明,必须存在name或ref属性."

我在下面列出了示例XSD和源代码:

ADDRESS.xsd - 由PERSON.xsd引用

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="ADDRESS.xsd" attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="ADDRESS" >
    <xs:complexType>
      <xs:sequence>
        <xs:element name="ADDRESS1" type="xs:string"/>
        <xs:element name="ADDRESS2" type="xs:string"/>
        <xs:element name="CITY" type="xs:string"/>
        <xs:element name="STATE" type="xs:string"/>
        <xs:element name="ZIP" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

PERSON.xsd

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="PERSON.xsd" attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:include schemaLocation="ADDRESS.xsd"/>
  <xs:element name="PERSON" >
    <xs:complexType>
      <xs:sequence>
        <xs:element name="L_NAME" type="xs:string"/>
        <xs:element name="F_NAME" type="xs:string"/>
        <xs:element name="Addresses">
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="ADDRESS" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element> …
Run Code Online (Sandbox Code Playgroud)

c# xml xsd .net-4.0

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

正则表达头痛

我想为脚本引擎验证一些C#源代码.我想确保只能引用System.Math类成员.我正在尝试创建一个正则表达式,它将匹配一个点,后跟一个大写字母,后跟任意数量的单词字符,以一个不在System.Math之前的单词边界结束.

我从这开始:

(?<!Math)\.[A-Z]+[\w]*
Run Code Online (Sandbox Code Playgroud)

哪个适用于:

return Math.Max(466.89/83.449 * 5.5);  // won’t flag this
return Xath.Max(466.89/83.449 * 5.5);  // will flag this
Run Code Online (Sandbox Code Playgroud)

它在没有Math之前正确匹配.Max.但是,现在我正在尝试将正则表达式扩展为包含System,我无法让它工作.

我已经尝试了正则表达式的这些排列以及更多:

((?<!System\.Math)\.[A-Z]+[\w]*)
((?<!(?<!System)\.Math)\.[A-Z]+[\w]*)
((?<!System)\.(?<!Math)\.[A-Z]+[\w]*)
((?<!System)|(?<!Math)\.[A-Z]+[\w]*)
((?<!System\.Math)|(?<!Math)\.[A-Z]+[\w]*)
Run Code Online (Sandbox Code Playgroud)

使用这些陈述:

return System.Math.Max(466.89/83.449 * 5.5);
return System.Xath.Max(466.89/83.449 * 5.5);
return Xystem.Math.Max(466.89/83.449 * 5.5);
Run Code Online (Sandbox Code Playgroud)

我已经尝试了所有我能想到的东西,但它总是匹配第二个元素(上面的.Math或.Xath),或者它与任何东西都不匹配.

如果有人会怜悯我并指出我做错了什么,我会非常感激.

先谢谢,韦尔顿

.net regex

6
推荐指数
1
解决办法
228
查看次数

如何使用 CodeDOM 在 AppDomain 中创建和加载程序集?

我正在开发一个项目,该项目将使用 CodeDOM 创建一个类,该类评估用户定义的表达式、为该类创建程序集并加载该程序集。由于可以有相当数量的用户定义表达式,我想首先创建一个 AppDomain,为该 AppDomain 中的程序集执行 CodeDOM 创建/加载和执行,然后卸载 AppDomain。

我搜索了不少,并且发现了如何加载现有装配成一个AppDomain的例子很多,但我似乎无法找到一个节目我如何从创建装配的应用程序域。

此示例 ( DynamicCode ) 使用 CodeDOM 创建一个程序集,然后将其加载到 AppDomain 中,但是,作者将程序集生成到磁盘。我更愿意在内存中生成程序集,这样我就不必管理生成的程序集的清理工作。(即使这确实在临时文件夹中创建了一个 .dll)。

谁能指出我如何做到这一点的例子?

任何帮助将不胜感激。

我已经从我的代码中摘录了一些摘录,这样你们都可以了解我到目前为止的内容:

private string CreateSource()
{
    CodeCompileUnit codeUnit = new CodeCompileUnit();
    CodeNamespace codeNamespace = new CodeNamespace(Namespace);
    CodeTypeDeclaration codeClass = new CodeTypeDeclaration
    {
        Name = "ExpressionEvaluator",
        IsClass = true,
        TypeAttributes = TypeAttributes.Public | TypeAttributes.Sealed
    };

    codeNamespace.Types.Add(codeClass);
    codeUnit.Namespaces.Add(codeNamespace);

    AddMethods(codeClass);

    string result = GenerateSourceCode(codeUnit);

    return result.ToString();
}

private CompilerResults CompileSource(string source)
{
    using (CodeDomProvider provider = new CSharpCodeProvider())
    {
        CompilerParameters …
Run Code Online (Sandbox Code Playgroud)

.net codedom appdomain

6
推荐指数
1
解决办法
5028
查看次数

如何使用Reflection.Emit注入文字表达式?

我正在研究一个项目来评估使用C#作为脚本语言的不同复杂度的标记化用户定义表达式.

我有一个工作模型使用CodeDOM和反射生成一个评估器类,创建和加载程序集(GenerateInMemory = true),实例化类,并执行evaluate方法.但是,我想在AppDomain中加载程序集,以便在执行完成后可以卸载它.在研究这个问题时,我被引导到了AppDomain.DefineDynamicAssembly方法.这似乎正是我需要的,因为我可以创建一个可收集的组件.

以下是用户定义表达式的几个示例,以及我的CodeDOM项目生成的类:

简单的用户定义表达式:

return Abs(@HDL@/@LDL@ * 5.5);
Run Code Online (Sandbox Code Playgroud)

生成的类:

namespace Lab.ResultProcessing
{

    public sealed class ExpressionEvaluator
    {
        public double Evaluate()
        {
            return System.Math.Abs(449.86881550861/74.934407754305 * 5.5);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

更复杂的用户定义表达式:

double GFR;
double MA_GFR;
double MB_GFR;
double FA_GFR;
double FB_GFR;

GFR = (170 *
        Pow(@CREAT@, -0.999) *
        Pow(@YEARS@, -0.176) *
        Pow(@BUN@, -0.170) *
        Pow(@ALBUMIN@, 0.318));

MA_GFR = GFR;
MB_GFR = GFR * 1.180;
FA_GFR = GFR * 0.762;
FB_GFR = GFR * 1.180 * 0.762;

if (("@RACE@" != "B") …
Run Code Online (Sandbox Code Playgroud)

.net assemblies reflection.emit appdomain

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

闪烁标签停止

我想使用空格而不是制表符。我发现this SO post似乎解决了这个问题。我使用了接受的答案,但我仍然遇到问题。如果我在以非空格开头的行的开头点击 Tab 键,则 Tab 键可以正常工作。但是,如果我单击超过 的行上的任意位置IndentWidth并按 Tab 键,它最多可以选择 8 个空格。

例如

我的IndentWidth是 2。我的文字是ABCDEFGHI。我使用句点来表示空格。

如果我在前面点击A并点击标签,我的文字变成..ABCDEFGHI(这是正确的)

如果我在前面点击B并点击标签,我的文字变成A.BCDEFGHI(这是正确的)

如果我在前面点击C并点击标签,我的文字变成AB......CDEFGHI(这是不正确的)

此外,如果光标位于一行的前导空格中的任何位置,当我按下 Tab 键时,光标将移动到第一个非空格字符,然后从那里跳出制表符。

例如

我的IndentWidth是 2。我的文字是....WXYZ。我使用句点来表示空格。

如果我单击前四个空格中的任意位置并点击 Tab,光标将移动到W,然后我的文本变为........WXYZ。(这是不正确的)

更新

我忽略了我在代码中专门设置了缩进属性,如下所示:

scintilla.Indentation.ShowGuides = true;
scintilla.Indentation.IndentWidth = 2;
scintilla.Indentation.TabIndents = true;
scintilla.Indentation.UseTabs = false;
Run Code Online (Sandbox Code Playgroud)

我只是IndentWidth在设计时尝试在属性编辑器中将设置为 2,现在它似乎可以正常工作。

结论:当在设计时和运行时设置属性时,编辑器的行为方式之间存在一些脱节。

c# scintilla

5
推荐指数
0
解决办法
920
查看次数