我正在使用TortoiseSVN 1.6.8,并怀疑我可能与我的服务器版本不兼容.
如何发现服务器上运行的SVN版本?
优选地来自Tortoise,但是失败了,来自SVN命令行.
我开始在Windows 7上测试Winforms(使用VS2008)应用程序,我看到一个奇怪的问题.
它在Win7的前几个安装中运行良好,但在接下来的两个版本中,我的许多对话框都太小了,将内容剪裁了大约30%.
该应用程序是在WinXP上开发的,并没有在任何 XP安装上看到这个问题!
刚开始调查问题 - 没有关于有效系统和尚未实现的系统之间差异的任何细节.
编辑
根据Kate对其中一个答案的评论,Win7有时会在安装新显示器时更改为自定义文本大小.有问题的机器有一个大的宽屏显示器,当我们检查(控制面板+显示+自定义文本大小) - 确定 - 自定义文本大小设置为125%.将其设置为100%会使问题消失.
然后,我可以通过将文本大小设置为125%来复制WinXP上的问题.
所以问题现在变成了 - 你如何确保Winforms应用程序是"自定义文本大小独立"?
/编辑
如上所述,这里有一些屏幕截图.第一个来自Windows 7计算机,第二个来自我的WinXP开发系统.


我需要解析来自测试仪器的串行数据流,这似乎是Reactive Extensions的一个很好的应用程序.
协议非常简单......每个"数据包"都是一个字母后跟数字.对于每种数据包类型,数字位数是固定的,但可以在数据包类型之间变化.例如
... ... A1234B123456C12
我试图把它分解为一个Observable of Strings,例如
"A1234""B123456""C12"......
认为这很简单,但是没有看到明显的方法来解决这个问题(我对LINQ有一些经验,但我是Rx的新手).
这是我到目前为止的代码,它从串口的SerialDataReceived事件产生了可观察的字符.
var serialData = Observable
.FromEventPattern<SerialDataReceivedEventArgs>(SerialPortMain, "DataReceived")
.SelectMany(_ =>
{
int dataLength = SerialPortMain.BytesToRead;
byte[] data = new byte[dataLength];
int nbrDataRead = SerialPortMain.Read(data, 0, dataLength);
if (nbrDataRead == 0)
return new char[0];
var chars = Encoding.ASCII.GetChars(data);
return chars;
});
Run Code Online (Sandbox Code Playgroud)
如何将serialData转换为String的Observable,其中每个字符串都是一个数据包?
我正处于项目的早期阶段,目前尚不清楚我们是否需要一个"真正的"数据库(即SQL Server等).所以我一直在使用MS-Access做一些原型设计,到目前为止工作正常.(在C#/ VS2008/.Net 3.5/MS-Access 2000中开发).
然而,对象 - 关系阻抗不匹配已经变得烦人,并且随着项目的发展而变得更糟.
我无法找到适用于MS-Access的ORM.有什么建议?
编辑 - 跟进 我们最终使用Fluent NHibernate,主要是因为它将我们的对象模型自动化到关系数据库,这对我们来说是一个巨大的胜利.我们发现的大多数FNH代码示例都使用了SQLite,这非常有效,我们打算将它用于我们的生产数据库.(该应用程序是一个桌面科学数据收集和分析包).
我本周刚开始关注NHibernate,并希望在我当前的项目中使用Automapping方法.
我正在使用Fluent NHibernate 1.0.0.594,这是我几天前下载的.
我在NHibernate源代码中找到了Examples.FirstProject,它使用了旧式的实体映射.作为NHibernate的介绍,这对我来说非常有价值,因为它可以直接使用.
但是,我一直无法为AutoMapping找到类似的独立工作示例.Peter Bromberg 发布了一个看起来不错的样本,但它似乎缺少一些重要的组件.他一直在帮助我尝试解决问题,但它还没有奏效.
接下来,我尝试修改Examples.FirstProject程序以使用自动映射,但是立即遇到了抛出异常的问题,而我目前的经验水平并不理解.
任何人都可以指向一个已知使用最新的NHibernate代码的Automapping示例项目吗?
我一直在桌面PC上使用Tortoise SVN(和VisualSVN)和本地存储库几个月.我们刚刚建立了一个Linux SVN服务器,我想将我的存储库移动到这个服务器,保留我的所有历史记录.一旦移动,我将停止使用本地存储库.
Tortoise文档建议使用"Relocate ..."命令,但这会抱怨UUID不匹配.我找到了一些关于如何编辑UUID文件以使其与服务器匹配的建议,但Tortoise忽略了新值,即使重启后也是如此.
此外,我目前没有Linux服务器的命令行访问权限,但如果必须,可能会获得它.
最好的方法是什么?
似乎NHibernate不能自动化实体中给定类型的多个IList.
考虑以下两个实体(基于Fluent NHibernate源代码中包含的Examples.FirstProject示例代码).
public class Employee
{
public virtual int Id { get; private set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
}
public class Store
{
public virtual int Id { get; private set; }
public virtual IList<Employee> Staff { get; set; }
public virtual IList<Employee> Managers { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这似乎是一个完全有效的对象模型 - 每个商店都有几名员工和几名经理员工.
但是当我自动化时,Staff和Managers列表存储在Employee表中,所有这些列表都具有相同的外键.
Employee Table
Id FirstName LastName Store_id
3 Daisy Harrison 1
4 Jack Torrance …Run Code Online (Sandbox Code Playgroud) 我对串行I/O没有多少经验,但最近一直负责修复一些高度有缺陷的串行代码,因为原来的程序员已经离开了公司.
该应用程序是一个Windows程序,通过USB上运行的虚拟COMM端口串行与科学仪器通信.虚拟COMM端口USB驱动程序由FTDI提供,因为它们制造我们在仪器上使用的USB芯片.
串行代码位于非托管C++ DLL中,由我们的旧C++软件和新的C#/ .Net(WinForms)软件共享.
有两个主要问题:
许多XP系统都失败了
当第一个命令发送到仪器时,没有响应.当您发出下一个命令时,您将从第一个命令获得响应.
这是一个典型的使用场景(调用方法的完整源代码如下所示):
char szBuf [256];
CloseConnection ();
if (OpenConnection ())
{
ClearBuffer ();
// try to get a firmware version number
WriteChar ((char) 'V');
BOOL versionReadStatus1 = ReadString (szBuf, 100);
...
}
Run Code Online (Sandbox Code Playgroud)
在发生故障的系统上,ReadString调用永远不会收到任何串行数据,并且会超时.但是如果我们发出另一个不同的命令,并再次调用ReadString,它将返回第一个命令的响应,而不是新命令!
但这只发生在Windows XP系统的大部分上 - 而且从不在Windows 7上.幸运的是,我们的XP开发机器运行良好,所以在我们开始进行beta测试之前我们没有看到问题.但我也可以通过在我的XP开发机上运行XP VM(VirtualBox)来重现这个问题.此外,只有在使用具有新C#版本的DLL时才会出现此问题 - 适用于旧的C++应用程序.
当我在调用ClearCommError之前将Sleep(21)添加到低级BytesInQue方法时,这似乎得到了解决,但这加剧了另一个问题--CPU使用率.睡眠时间少于21毫秒会使故障模式重新出现.
CPU使用率高
在进行串行I/O CPU时,使用率过高 - 通常高于90%.新的C#应用程序和旧的C++应用程序都会发生这种情况,但新应用程序的情况要糟糕得多.通常会使用户界面非常无响应,但并非总是如此.
这是我们的Port.cpp类的代码,它的所有可怕的荣耀.抱歉长度,但这是我正在使用的.最重要的方法可能是OpenConnection,ReadString,ReadChar和BytesInQue.
//
// Port.cpp: Implements the CPort class, which is
// the class that controls the serial port.
//
// Copyright (C) 1997-1998 …Run Code Online (Sandbox Code Playgroud) 我从一个离开公司的另一个程序员继承的代码中遇到了一个奇怪的问题,需要一些关于如何开始解决它的指导.
问题在于 - 在半定期的基础上,我们发现正在创建重复的USB虚拟通信端口.例如,在我的PC上,当我在设备管理器中查看端口并选择"查看隐藏设备"时,我有两个相同设备的条目 - 一个在COM6上,一个在COM8上.
不幸的是,我们无法可靠地重新创建问题.我们怀疑当我们的软件运行时有人快速断开并重新连接USB电缆时可能会发生这种情况,但需要确认.
据我所知,代码的编写假设没有人会拔掉电缆.在SW启动后,我没有看到任何逻辑来检测这种情况.当您重新插入电缆时它会失败 - 即使在重新插入电缆后也会无声地产生读写错误.您必须重新启动程序才能再次运行.
我的串口和USB体验很少,而且如何开始修复这个问题我有点不知所措.
任何人都可以建议为什么会发生这种情况?
杂项.细节,以防它们可能相关:
USB串行代码在C++ DLL中
VS2008
FTDIBUS USB /串行驱动程序
Windows XP和Win7
重复注册表项的屏幕截图(注意所选键的值!)

有人能指出我使用.net 4.5异步API(异步,等待,任务<>,ReadAsync等)进行串行通信的工作示例吗?
我试图调整现有的事件驱动的串行样本,并且得到各种可怕的行为 - "其他应用程序使用的端口"错误,VS2013调试器抛出异常和锁定 - 这通常需要PC重启才能从中恢复.
编辑
我从头开始编写自己的样本.这是一个简单的Winforms项目,它写入Output窗口.表单上的三个按钮 - 打开端口,关闭端口和读取数据.ReadDataAsync方法调用SerialPort.BaseStream.ReadAsync.
截至目前,它将从端口读取数据,但我遇到了使其变得强大的问题.
例如,如果我拔下串行电缆,打开端口,然后单击Read Data两次,我将得到一个System.IO.IOException(我有点期待),但我的应用程序停止响应.
更糟糕的是,当我尝试停止我的程序时,VS2013会抛出一个"正在进行停止调试"对话框,该对话框永远不会完成,我甚至无法从任务管理器中删除VS. 每次发生这种情况都必须重启我的电脑.
不好.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private SerialPort _serialPort;
public Form1()
{
InitializeComponent();
}
private void openPortbutton_Click(object sender, EventArgs e)
{
try
{
if (_serialPort == null )
_serialPort = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
if (!_serialPort.IsOpen)
_serialPort.Open(); …Run Code Online (Sandbox Code Playgroud) c# ×3
serial-port ×3
automapping ×2
c++ ×2
svn ×2
tortoisesvn ×2
usbserial ×2
.net ×1
async-await ×1
asynchronous ×1
dpi ×1
ms-access ×1
nhibernate ×1
orm ×1
usb ×1
visual-c++ ×1
visualsvn ×1
windows ×1
windows-7 ×1
winforms ×1