我正在尝试为使用basicHttpBinding的Windows移动应用程序生成WCF代理客户端代码,并且我不断收到以下错误:
错误:工具中发生错误.
错误:应用程序中出错
之前我能够生成代理,但我不知道为什么突然发生这种情况.我已经阅读了Sameh Samir的帖子,但我使用的服务不使用我创建的任何消息合同(我使用过LINQ to SQL ORD),WCFTestClient可以连接到服务并显示合同.
UPDATE
似乎问题出在Windows 7 RC1上.我在Win7上尝试它并在XP上运行NetCFSvcUtil之后一切正常.
任何人都知道如何向Microsoft报告此问题?
我有一个列表框显示枚举项目.我想在列表框显示/表单打开时选择/突出显示当前值(从数据库中读取).但是这段代码:
lblSelectedPrinter.Text = AppSettings.ReadSettingsVal("beltprinter");
listBoxBeltPrinters.SelectedItem = listBoxBeltPrinters.Items.IndexOf(lblSelectedPrinter.Text);
Run Code Online (Sandbox Code Playgroud)
......不起作用.我在这里看到了一个使用"GetItemAt"的例子(以编程方式在ListBox中选择项目/索引)但是我的简化和古老版本的C#(.NET 1.1,C#2)没有这样的生物.
我认为这会奏效:
string currentPrinter = AppSettings.ReadSettingsVal("beltprinter");
lblSelectedPrinter.Text = currentPrinter;
int currentPrinterIndex = listBoxBeltPrinters.Items.IndexOf(currentPrinter);
listBoxBeltPrinters.SelectedItem = currentPrinterIndex;
Run Code Online (Sandbox Code Playgroud)
...但它也没有(当前打印机显示在标签中,但未选中列表框中的相应条目/值).
我需要将应用程序的当前文化更改为th-TH我尝试这样做以创建以下类型的对象,并且我打算将其分配给当前线程的CurrentCulture属性
System.Threading.Thread.CurrentThread.CurrentCulture =
new System.Globalization.CultureInfo("en-US");
Run Code Online (Sandbox Code Playgroud)
但我正在使用的.NET Compact版本没有属性中的CurrentCulture System.Threading.Thread.CurrentThread属性.
我们有办法做到这一点吗?
编辑: 我可以更改移动设备的区域设置,然后当我运行应用程序时,我能够从正确的资源文件中获取正确的文本.
但是在使用安装项目安装应用程序时,我无法获得正确的资源
这就是我所做的.
我还验证了所需的文件夹,如fr-CA,th-TH等,是在我的应用程序的.exe存在的同一目录中创建的
我有很多NUnit和MBUnit的经验,但我是.NET Compact Framework开发的新手,我想要站稳脚跟.
是否有一个流行的.NET Compact Framework单元测试框架,如果有,它是什么?
我有丰富的非托管的Windows CE 5的C++代码,提供,我想通过它写在托管C#在Windows CE 6和Compact Framework的大量新业务和通讯逻辑相结合的新产品使用的UI.
UI可能知道业务逻辑,但我希望业务逻辑不知道UI,以便我以后可以用托管版本或我选择作为前端的任何其他UI替换它.
我发现了一篇文章,描述了如何使用COM作为Windows世界中的桥梁,但我在WinCE下的.NET CF中应用它时遇到了困难.在过去,我已经导入了类型库并使用COM调用(CoInitialize(),CoCreateInstance())来获取指向其他Windows平台上的接口的指针,这就是我目前正在追求的策略:直接使用COM假设在WinCE中提供相同的工具,非托管C++库来访问托管库中的C#接口.
这是我的问题:typelib.它在我的托管C#库中不可用,因为我过去通过'#import"SomeCPPLibrary.dll"声明使用它.我相信它隐藏在.dll程序集中,以不同于过去的方式存储,因此,不能通过库本身的#import直接获得.我认为我可以#IMPORT类型库,但我不能找到一种方法,从我的管理.dll文件中提取类型库,而我也许能破解在一起的接口定义文件(的.idl),并使用该平台的MIDL.EXE从它生成一个.tlb,不能保证我的.idl,以及由此产生的.tlb真正匹配我的C#.dll中的内容.我甚至不知道平台midl.exe是否以这种方式工作,但我认为它确实如此.
我吠叫错了树吗?是否可以通过相应的COM接口在非托管C++中使用托管C#接口?
是否设置[组件:标记有ComVisible特性(真)在其AssemblyInfo.cs文件属性使托管程序集的所有接口可以通过COM在不可控制的世界通过GUID的AssemblyInfo.cs中定义,或做我必须做更多的东西?
如何从托管的.dll中获取typelib,以便我的非托管C++库可以#import它?
我尝试将我的托管C#库项目添加为非托管C++库项目中的参考,但这似乎没有帮助.在这种情况下,这样的参考是否相关?
有没有更好的方法来解决从非托管C++世界调用托管C#代码的基本问题?我刚刚在这里阅读的是一个混合模式库,带有托管翻译层来桥接非托管/托管差距.我不知道这是一个很好的策略,呼叫响应速度的一个重要因素,但可能它是从长远来看更好,因为我打算在某个时候重写UI来管理C#,从而把所有的精力的扔掉用户界面而不是用更永久的商业/通信逻辑来捣乱?无论这个问题的答案如何,我仍然想解决使用COM的问题,如果没有其他原因而不是好奇心.
我有一个在Compact Framework上运行的.NET 2.0应用程序.它有许多不同的形式,最初设计为在具有特定屏幕分辨率的特定设备上运行.我现在希望让这个应用程序在其他一些具有非常不同的屏幕分辨率的设备上运行(有些具有完全相反的宽高比,其中屏幕现在高于它的宽度).我的问题是如何在其他屏幕上更改我的表单以使其看起来更好?
这与在完整框架上设计表单略有不同,因为我必须设计这些表单以占据整个屏幕,因为屏幕非常小.我曾考虑为每种类型的屏幕方向创建单独的表单(例如MyForm_Wide.cs,MyForm_Tall.cs等).我希望能够重用非设计器生成的代码,该代码包含许多与UI控件绑定的业务逻辑.也许我可以以某种方式使用部分类来实现这一点(例如,MyForm.cs以某种方式被编译成MyForm_Wide.Designer.cs等).我真的想避免每个屏幕方向的特定编译版本.我想到的另一种方法是尝试根据确定的屏幕大小在运行时重新排列一些控件.
你们有什么感想?
我想记录我的.NET应用程序使用的所有DLL的版本.如果在启动时或首次使用每个DLL时生成日志输出并不重要.
我想到的第一个解决方案是迭代所有DLL文件,这些文件与我的程序集位于同一目录中.但这是我最好的选择吗?有没有更好的方法来做到这一点?重要的是,该解决方案也应该适用于.NET-Compact-Framework.
我需要在.NETCF中创建一个透明背景的图像,我使用洋红色作为我希望透明的背景.我尝试这样做的方法是覆盖onPaint().但我无法让背景透明化?这就是我所拥有的:
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
ImageAttributes imageAttributs = new ImageAttributes();
imageAttributs.SetColorKey(Color.FromArgb(255, 0, 255),
Color.FromArgb(255, 0, 255));
g.DrawImage(cross, crossRect, 200, 10, cross.Width, cross.Height,
GraphicsUnit.Pixel, imageAttributs);
base.OnPaint(e);
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试包含ImageAttributes时,我的图像根本没有被绘制?
我有一个ListView控件与CheckBoxes = true和View = Details窗体上,但我不希望复选框,可以由用户"可检查".我用它来记录完成的状态显示.但是,我想使用事件处理函数通过代码检查框(即记录完成时:) lvMeters_ItemCheck(null, null);.
我已经禁用了检查盒子本身(我认为,触摸屏在这个设备上并不是真正精确).但是,当选择一行(我有FullRowSelect = true)时,控件通常会检查复选框,并且似乎没有调用事件处理程序.
我试图基本上撤消事件处理程序中的操作:
private void lvMeters_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (sender is ListView)
{
if (e.CurrentValue == CheckState.Checked)
lvMeters.Items[e.Index].Checked = true;
else
lvMeters.Items[e.Index].Checked = false;
}
else if (e.CurrentValue == CheckState.Checked)
lvMeters.Items[e.Index].Checked = false;
else
lvMeters.Items[e.Index].Checked = true; …Run Code Online (Sandbox Code Playgroud) 我有一个在CF.NET和.NET下运行的库,但两者之间的序列化不同.因此,在.NET下生成的XML文件在.NET下是不可读的,这对我来说是个大问题!
这里是代码示例:
[Serializable, XmlRoot("config")]
public sealed class RemoteHost : IEquatable<RemoteHost>
{
// ...
}
public class Program
{
public static void Main()
{
RemoteHost host = new RemoteHost("A");
List<RemoteHost> hosts = new List<RemoteHost>();
hosts.Add(host);
XmlSerializer ser = new XmlSerializer(typeof(List<RemoteHost>));
ser.Serialize(Console.Out, hosts);
}
}
Run Code Online (Sandbox Code Playgroud)
CF.NET xml:
<?xml version="1.0"?>
<ArrayOfConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<config Name="A">
</config>
</ArrayOfConfig>
Run Code Online (Sandbox Code Playgroud)
.NET xml
<?xml version="1.0" encoding="ibm850"?>
<ArrayOfRemoteHost xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<RemoteHost Name="A">
</RemoteHost>
</ArrayOfRemoteHost>
Run Code Online (Sandbox Code Playgroud)
如何修改程序以生成相同的XML?
.net ×5
c# ×5
.net-1.1 ×2
windows-ce ×2
winforms ×2
.net-2.0 ×1
com ×1
cultureinfo ×1
listbox ×1
listboxitem ×1
logging ×1
managed ×1
pocketpc ×1
unit-testing ×1
unmanaged ×1
wcf ×1
xml ×1