小编Sam*_*der的帖子

我应该在我的应用程序中默认设置Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture吗?

我有一个适用于全球市场的应用程序,需要可以本地化.在开发过程中,我遇到了一些问题,即使我改变了我的语言环境,我的卫星装配似乎也没有被拾取.经过一些研究后,我现在明白为什么会这样,并且能够通过在代码中设置CurrentUICulture并验证事情是否按预期工作来进行测试.

现在要将应用程序打包发布,我不确定当我的应用程序启动时为当前线程设置Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture是个好主意.从好的方面来说,我的应用程序可以通过更改区域设置进行本地化(如果这是一个好的方面),但我担心可能存在不可预见的缺点.立即浮现在脑海中的是,虽然我所做的一切对我的线程都很好,但它不适用于(从我在这里和周围阅读中理解的内容)到由我的app创建的任何线程(除非我设置了CurrentUICulture,或者更糟糕的是我使用的任何组件都可以创建自己的线程.

还有其他问题吗?是否将CurrentCultures设置为标准做法或不赞成的东西?

在做出决定之前,我希望能够掌握有关这方面起伏的信息.

谢谢

山姆

.net localization internationalization

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

在2台机器上生成的.tlh是不同的

我有一个.NET DLL,它有一些暴露给com的接口\类.在构建过程中生成一个.tlb文件,这个tlb由一些c ++代码引用.结果,编译器为tlb生成.tlh文件.

当我在本地运行构建时,其中一个接口中的一个属性最终会得到tlh中不具有相同名称的相应方法..net代码中的属性称为PropertyA,最终称为get_propertyA,而PropertyB最终称为get_PropertyB.当发生这种情况时我没有眨眼睛,只是使用了tlh中定义的方法,并假设一切都是笨拙的,但是当我编写这些更改时,构建对其他任何人都不起作用,因为编译器生成了名为get_PropertyA的属性, get_PropertyB(在propertyA中注意案例不匹配).

在两台机器上生成的tlb文件是相同的(根据十六进制比较器),并且tlh文件都由相同的编译器版本生成.

构建过程通过执行以下操作创建tlb:regasm path\to\dll\Mydll.dll -tlb:path\to\output\mydll.tlb

任何想法为什么我的本地版本最终与一个名称不正确的属性?或者我能做些什么来解决它?

更新:我读到tlbexp将使用它找到的字符串的第一个版本,并且可以通过重新编译来更改.虽然我没有使用tlbexp,但我想知道这是不是问题.我找到了与我的方法同名的参数(在其他方法中),但在开头有一个小写字母.所以我替换了所有这些.重建,没有变化.所以我然后重命名了我的COM方法.重建并获得预期的丢失方法错误.将方法重命名为原始名称,嘿,它似乎是固定的.因为它现在似乎工作,我不能让它再次失败我不能尝试建议的解决方案,但我喜欢重命名的想法,以防将来发生这种情况.

.net compiler-construction com interop typelib

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

我应该有返回Disposable实例列表的方法吗?

我有一个类,需要处理它的实例.我也有几个类来生成这些实例,可以是单独的,也可以是它们的列表.

我应该IList<MyClass>从我的方法返回还是应该创建一个MyClassCollection也是一次性的类并返回它?

编辑:

我问的主要原因是我最终做了很多这样的事情:

IList<MyObject> list = GetList();
foreach(MyObject obj in list)
{
     //do something
     obj.Dispose();
} 
Run Code Online (Sandbox Code Playgroud)

似乎我会做得更好:

using (IList<MyObject> list = GetList())
{
     foreach(MyObject obj in list)
     {
     //do something

     } 
}
Run Code Online (Sandbox Code Playgroud)

.net c# collections idisposable

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

WCF有类型的问题吗?

当我调用我的WCF Soap服务的方法时,会抛出错误并在svlog文件中显示错误:

输入数据协定名称为"消息:http://schemas.datacontract.org/2004/07/xxx.ActiveDirectoryService.classes.WCF "的"xxx.ActiveDirectoryService.classes.WCF.Message" .考虑使用DataContractResolver或将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中.

我试图在这里和那里使用KnownType但没有成功(我必须承认我不太确定我100%正确使用它).

这是我的接口/类:

[ServiceContract]
public interface IActiveDirectory
{
    [OperationContract]
    [WebGet]
    void Dummy();

    [OperationContract]
    [WebGet]
    AbstractMessage Dummy2();

    [OperationContract]
    [WebGet]
    AbstractMessage Dummy3();

    [OperationContract]
    [WebGet]
    AbstractMessage SetPassWord(string customer, string customerPassword, string userLogin, string userPassword);
}

[DataContract]
public abstract class AbstractMessage
{
    [DataMember]
    public virtual bool IsError { get; set; }

    [DataMember]
    public virtual string ErrorMessage { get; set; }

    [DataMember]
    public virtual string ReturnValue { get; set; }
}

public class Message : AbstractMessage …
Run Code Online (Sandbox Code Playgroud)

c# wcf serialization types

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

处理和转换中哪一个更快int.Parse(),int.TryParse(),Convert.Int32()

哪一个更快,更强大,更可靠.为什么?

int.Parse()
int.TryParse()
Convert.ToInt32()
Run Code Online (Sandbox Code Playgroud)

.net c#

5
推荐指数
2
解决办法
2200
查看次数

在CSS或javascript中更改div顺序

说我有这样的布局:

<div id="main">            
    <div id="NormalContent">
        {some content which is a fixed length list}
    </div>
    <div id="FeaturedContent">
        {some content which may contain a long list}
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我想将FeaturedContent放在NormalContent之上.

我可以用CSS做到这一点吗?我想我可以使用Javascript吗?

html javascript css

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

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

工厂创建泛型类

我有一个名为Validator的抽象类:

public abstract class Validator<T> where T : IValidatable
{
    public abstract bool Validate(T input);
}
Run Code Online (Sandbox Code Playgroud)

我有一些具体的实现.一个是AccountValidator:

public class AccountCreateValidator : Validator<IAccount>
{
    public override bool Validate(IAccount input)
    {
        //some validation
    }
}
Run Code Online (Sandbox Code Playgroud)

另一个是LoginValidator:

public class LoginValidator : Validator<IAccount>
{
    public override bool Validate(IAccount input)
    {
        //some different validation
    }
}
Run Code Online (Sandbox Code Playgroud)

我现在想要创建一个工厂来返回验证器实现的实例.就像是:

public static class ValidatorFactory
{
    public static Validator GetValidator(ValidationType validationType)
    {
        switch (validationType)
        {
            case ValidationType.AccountCreate:
                return new AccountCreateValidator();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我喜欢这样称呼它

Validator myValidator = ValidatorFactory.GetValidator(ValidationType.AccountCreate); 
Run Code Online (Sandbox Code Playgroud)

但是它不喜欢返回新的AccountCreateValidator()行,或者我将myValidator声明为Validator而不是 …

c# generics factory-pattern fluentvalidation

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

我可以从azure上的部署中生成代码覆盖吗?

我们希望能够将代码部署到azure,然后在已部署的实例上运行集成/验收测试以验证功能,因为使用模拟器并不总能提供真实的结果.

我们还希望让这些测试生成代码覆盖率报告,然后我们可以将这些报告与单元测试中的代码覆盖率合并.我们使用TeamCity作为我们的构建服务器,内置的dotcover作为我们的代码覆盖工具.

我们可以这样做吗?有没有人有任何指示从哪里开始?

integration-testing code-coverage azure dotcover

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

SpecFlow 测试未显示在测试资源管理器中

我已经在使用 SpecFlow 的多台 PC 和应用程序上安装了 Visual Studio 2015。该应用程序在 1 台电脑上正常运行,因为那里的所有东西都是很久以前安装的。但是,在其他 PC 上,测试资源管理器中没有显示测试,我需要它们在测试资源管理器中。请帮忙

visual-studio specflow

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