小编Mat*_*ias的帖子

Roslyn ImportAdderService不访问琐事

Microsoft.CodeAnalysis.Editing.ImportAdderService.AddImportsAsync方法仅访问非琐事语法节点,因此不会为它们添加命名空间导入.这导致了结果,当使用时,xml文档注释中的cref不能简化为它们的短名称Microsoft.CodeAnalysis.Simplification.Simplifier.

我遇到的最大问题是简化会导致结果不一致.假设您有多个cref,并且对于一个cref,您有一个名称空间导入(由于另一种类型引入,实际上在非琐事节点中使用).然后,这一个cref缩短了,而其他的则没有.

为了澄清.

申请之前ImportAdderServiceSimplifier:

namespace Namespace
{
  /// <summary>
  /// <see cref=""System.Collections.IEnumerable"" />
  /// <see cref=""System.Collections.Generic.IEnumerable{T}"" />.
  /// </summary>
  internal class MyDeclaration
  {
    System.Collections.IEnumerable Field;
  }
}
Run Code Online (Sandbox Code Playgroud)

申请后ImportAdderServiceSimplifier:

using System.Collections;

namespace Namespace
{
  /// <summary>
  /// <see cref=""IEnumerable"" />
  /// <see cref=""System.Collections.Generic.IEnumerable{T}"" />.
  /// </summary>
  internal class MyDeclaration
  {
    IEnumerable Field;
  }
}
Run Code Online (Sandbox Code Playgroud)

我可以解决这个问题吗?我们肯定希望为cref标签中引用的所有类型添加使用.

或者甚至是设计?

我想这确实是一个缺失的功能,告诉ImportAdderService访问trivia语法节点.

c# roslyn

9
推荐指数
0
解决办法
165
查看次数

如何向Visual Studio 2012添加命令?

如何将自定义命令添加到键盘对话框(工具 - >选项 - >键盘)以通过快捷方式触发它们?不幸的是,我在网上找不到任何资源.

我浏览了这篇博文,但它略有不同,因为我必须创建一个菜单条目.我只想在键盘对话框中显示命令.就像它与宏一起工作一样.

vsx visual-studio-2012

8
推荐指数
1
解决办法
2190
查看次数

使用roslyn生成语义代码

我们试图找出如何使用Roslyn生成代码.我不是在谈论类似的东西CSharpSyntaxTree.ParseText会占用一些字符串并将它们转换成AST.相反,我想以某种方式构建我的模型(伪代码):

  1. 创建file为编译单元
  2. 添加类MyClassfile
  3. 添加方法DoSomethingMyClass
  4. DoSomething以类似的方式设置身体System.Linq.Expressions

我们最近发现Microsoft.CodeAnalysis.CSharp.SyntaxFactory,它似乎很有希望.但是,显然我们必须自己添加琐事.

在构建一个树SyntaxFactory.CompilationUnit()并且来回添加一些成员之后,输出ToFullString()只是一堆文本,既不可读也不可编译(例如,缺少大括号).从模型生成文本时,我们会错过什么吗?

编辑:

使用工作空间时,可以设置影响空白行为的选项:

public string Generate (CompilationNode rootNode)
{
  var cw = new CustomWorkspace();
  cw.Options.WithChangedOption (CSharpFormattingOptions.IndentBraces, true);
  var formattedCode = Formatter.Format (CreateFile(rootNode), cw);
  return formattedCode.ToFullString();
}
Run Code Online (Sandbox Code Playgroud)

这已经产生了更好的结果.有人可以证实这是一个很好的解决方案,还是一个黑客?

还有一个问题.我们想要生成一个自动属性,当前正在使用SF.AccessorDeclaration但在转换为完整字符串时它会错过分号.

c# roslyn

8
推荐指数
1
解决办法
4888
查看次数

有没有办法用itextsharp替换PDF文件中的文本?

我正在使用itextsharp生成PDF,但我需要动态更改一些文本.我知道如果有任何AcroField可以改变,但我的PDF doen有任何一个.它只有一些纯文本,我需要改变其中的一些.

有谁知道怎么做?

c# itextsharp

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

Javascript regexp使用val().match()方法

我正在尝试使用以下规则验证名为phone_number的字段:

第一个数字应为3然后是另外9个数字,因此总共10个数字示例:3216549874

或者可以是7个数字1234567

这里我有我的代码:

        if (!($("#" + val["htmlId"]).val().match(/^3\d{9}|\d{7}/)))
            missing = true;
Run Code Online (Sandbox Code Playgroud)

为什么不工作:(当我把它放入在线正则表达式检查器显示良好.

javascript jquery

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

我可以使用种子在AutoFixture中重新生成随机值吗?

AutoFixture中是否有任何方法fixture.Create<string>()可以产生相同的结果?即,我可以用种子初始化夹具吗?

更新

更确切地说,我正在寻找一个随机值生成器,它使用一些随机种子初始化,如果测试失败也会输出.因此,我可以为特定的测试运行取种子,并再次使用固定种子运行测试.种子应该适用于所有实例,无论其类型如何.我认为这是在测试中使用随机值的最有效方法,因为它具有巨大的覆盖范围,并且也是可重现的.

c# unit-testing autofixture

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

在WCF服务和单独的线程之间进行通信的最佳方式是什么?

问题的措辞不一定是正义问题......

  • 我有一个客户端UI坐在本地盒子上,后台窗口服务支持它同时执行后台功能.
  • 客户端UI只是表示层,而Windows服务执行所有强力点击操作......因此需要在两者之间进行通信.在google上花了一段时间并阅读最佳实践后,我决定使用WCF和命名管道来创建服务层.
  • 客户端UI是WCF客户端,Windows服务充当WCF主机(仅在本地托管)以支持客户端.

所以这应该没问题.客户端UI可以将数据传递给WCF主机.但我的问题是,我如何使这些数据有用?我在Windows服务/ WCF主机上运行了几个引擎但是WCF主机完全没有意识到任何后台引擎的存在. 我需要客户端的通信请求才能与这些引擎进行交互.

有没有人知道如何在WCF主机和运行线程之间促进通信的良好设计模式或方法?

c# wcf multithreading design-patterns

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

显式方法的覆盖覆盖隐藏属性

有一个有一个属性的类:

public class BaseClass
{
  public virtual string Property1 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在我使用一些方法覆盖创建派生类型:

[Test]
public void name ()
{
  var assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly (new AssemblyName ("Test"), AssemblyBuilderAccess.RunAndSave);
  var moduleBuilder = assemblyBuilder.DefineDynamicModule ("Test.dll");
  var derivedBuilder = moduleBuilder.DefineType ("DerivedClass", TypeAttributes.Public, typeof (BaseClass));

  const MethodAttributes methodAttributes = MethodAttributes.Private | MethodAttributes.Virtual | MethodAttributes.SpecialName | MethodAttributes.NewSlot;

  var getterOverride = derivedBuilder.DefineMethod (
      "get_Property1",
      methodAttributes,
      typeof (string),
      Type.EmptyTypes);
  var getterILGenerator = getterOverride.GetILGenerator();
  getterILGenerator.Emit (OpCodes.Ldnull);
  getterILGenerator.Emit (OpCodes.Ret);
  derivedBuilder.DefineMethodOverride (getterOverride, typeof (BaseClass).GetMethod ("get_Property1"));

  var setterOverride = derivedBuilder.DefineMethod …
Run Code Online (Sandbox Code Playgroud)

c# reflection.emit

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

PostSharp和未初始化的对象

假设我有一个方面实现IInstanceScopedAspect,我已将此方面应用于类型中的方法.如何在创建对象时初始化方面FormatterServices.GetUninitializedObject?构造函数没有被执行,因此NullReferenceException当我执行应用方面的方法时,我得到了一个.

是否有可用于初始化对象方面的PostSharp API?

postsharp

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

System.Xaml和System.Windows.Markup的Xaml读者之间的区别?

有两个Xaml读者.其中一个包括在System.Xaml另一个包括在内System.Windows.Markup.他们之间有什么区别?

c# silverlight wpf markup xaml

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