我有一个适用于全球市场的应用程序,需要可以本地化.在开发过程中,我遇到了一些问题,即使我改变了我的语言环境,我的卫星装配似乎也没有被拾取.经过一些研究后,我现在明白为什么会这样,并且能够通过在代码中设置CurrentUICulture并验证事情是否按预期工作来进行测试.
现在要将应用程序打包发布,我不确定当我的应用程序启动时为当前线程设置Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture是个好主意.从好的方面来说,我的应用程序可以通过更改区域设置进行本地化(如果这是一个好的方面),但我担心可能存在不可预见的缺点.立即浮现在脑海中的是,虽然我所做的一切对我的线程都很好,但它不适用于(从我在这里和周围阅读中理解的内容)到由我的app创建的任何线程(除非我设置了CurrentUICulture,或者更糟糕的是我使用的任何组件都可以创建自己的线程.
还有其他问题吗?是否将CurrentCultures设置为标准做法或不赞成的东西?
在做出决定之前,我希望能够掌握有关这方面起伏的信息.
谢谢
山姆
我有一个.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方法.重建并获得预期的丢失方法错误.将方法重命名为原始名称,嘿,它似乎是固定的.因为它现在似乎工作,我不能让它再次失败我不能尝试建议的解决方案,但我喜欢重命名的想法,以防将来发生这种情况.
我有一个类,需要处理它的实例.我也有几个类来生成这些实例,可以是单独的,也可以是它们的列表.
我应该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) 当我调用我的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) 哪一个更快,更强大,更可靠.为什么?
int.Parse()
int.TryParse()
Convert.ToInt32()
Run Code Online (Sandbox Code Playgroud) 说我有这样的布局:
<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吗?
为什么El Gamal比RSA具有相同的模数长度?
我有一个名为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而不是 …
我们希望能够将代码部署到azure,然后在已部署的实例上运行集成/验收测试以验证功能,因为使用模拟器并不总能提供真实的结果.
我们还希望让这些测试生成代码覆盖率报告,然后我们可以将这些报告与单元测试中的代码覆盖率合并.我们使用TeamCity作为我们的构建服务器,内置的dotcover作为我们的代码覆盖工具.
我们可以这样做吗?有没有人有任何指示从哪里开始?
我已经在使用 SpecFlow 的多台 PC 和应用程序上安装了 Visual Studio 2015。该应用程序在 1 台电脑上正常运行,因为那里的所有东西都是很久以前安装的。但是,在其他 PC 上,测试资源管理器中没有显示测试,我需要它们在测试资源管理器中。请帮忙
.net ×4
c# ×4
azure ×1
collections ×1
com ×1
cryptography ×1
css ×1
dotcover ×1
elgamal ×1
encryption ×1
generics ×1
html ×1
idisposable ×1
interop ×1
javascript ×1
localization ×1
rsa ×1
security ×1
specflow ×1
typelib ×1
types ×1
wcf ×1