小编Jen*_*sen的帖子

使用XmlSerializer时如何在XML文件中写注释?

我有一个对象Foo,我将其序列化为XML流.

public class Foo {
  // The application version, NOT the file version!
  public string Version {get;set;}
  public string Name {get;set;}
}

Foo foo = new Foo { Version = "1.0", Name = "Bar" };
XmlSerializer xmlSerializer = new XmlSerializer(foo.GetType());
Run Code Online (Sandbox Code Playgroud)

这可以快速,轻松地完成当前所需的一切.

我遇到的问题是我需要维护一个单独的文档文件,其中包含一些小的评论.如上例所示,Name很明显,但是Version应用程序版本而不是数据文件版本,正如人们在这种情况下所期望的那样.而且我还有许多类似的小事我想用评论来澄清.

我知道如果我使用该WriteComment()函数手动创建我的XML文件,我可以这样做,但是我可以实现可能的属性或替代语法,以便我可以继续使用序列化程序功能吗?

.net c# xml xml-serialization xmlserializer

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

在.NET 4中最大化窗口时,窗口顶部和左侧值未正确更新

我试图将窗口居中到所有者窗口.我还需要子窗口沿所有者窗口移动.可以在此处找到MSDN WPF论坛上的交叉帖子.

要做到这一点我订阅LocationChangedSizeChanged事件(以及StateChanged事件),我的子窗口的所有者.当这些事件被触发时,我重新计算子窗口的位置.我在子窗口的代码隐藏中执行此操作.

代码很直接:

Top = Owner.Top + ((Owner.ActualHeight - ActualHeight) / 2);
Left = Owner.Left + ((Owner.ActualWidth - ActualWidth) / 2);
Run Code Online (Sandbox Code Playgroud)

如果您编译并运行我提供的示例程序,您将看到它在主窗口原样并且四处移动时有效.这部分是有效的.

所有者窗口最大化时出现问题.(并且在最大化之后,恢复正常.)因为我订阅了三个事件,所以我进入三次重定位函数.打印出所有者数据后,我得到不同的结果.最烦人的TopLeft所有者窗口的值了.当状态改变时,它似乎得到正确的Top和Left值,但是ActualWidthActualHeight值是错误的.当LocationChangedSizeChanged事件触发的ActualWidthActualHeight值是OK,但顶部和左侧值不正确.看来这些是以前的价值观.怎么会这样?是什么造成的?是否有适当的解决方案?

由于相同的代码似乎在.net 3.5中工作,我的印象是在.net 4中发生了一些变化.(或者我有一个奇怪的计时问题导致问题不会出现.)但是我找不到任何记录在案的变化部分.

.NET 3.5:

OnOwnerLocationChanged
T: -8; L: -8; W: 640; H: 480
OnOwnerStateChanged
T: -8; L: -8; W: 640; H: 480
OnOwnerSizeChanged
T: -8; L: -8; W: 1936; H: 1066 …
Run Code Online (Sandbox Code Playgroud)

.net c# wpf

13
推荐指数
1
解决办法
5461
查看次数

应用程序可执行文件名与vshost可执行文件名不同

我有一个问题,我的vshost.exe文件名与我的实际application.exe文件名不同,阻止我调试应用程序.

设置如下:

- MySolution
    - Installer.Release
    - Installer.Debug
    - Installer.Testing
    - MyApplication
Run Code Online (Sandbox Code Playgroud)

我正在使用Visual Studio 2012,.NET 4.0和InstallShield LE.

现在,我无法控制的原因,它决定了应用程序的可执行文件名称应包含环境:MyApplication (Release).exe,MyApplication (Debug).exe,MyApplication (Testing).exe.

通过将.csproj文件修改为以下内容可以轻松完成此操作:

<AssemblyName>MyApplication (Release)</AssemblyName>
<AssemblyName Condition="'$(Configuration)' == 'Debug'">MyApplication (Debug)</assemblyName>
<AssemblyName Condition="'$(Configuration)' == 'Testing'">MyApplication (Testing)</AssemblyName>
Run Code Online (Sandbox Code Playgroud)

在其中构建应用程序时Debug,在我的bin/Debug文件夹中生成以下文件:

MyApplication (Debug).exe
MyApplication (Debug).exe.config
MyApplication (Debug).vshost.exe
MyApplication (Debug).vshost.manifest
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.

在构建应用程序时Testing,它会在我的bin/Testing文件夹中生成以下文件:

MyApplication (Testing).exe
MyApplication (Testing).exe.config
MyApplication (Debug).vshost.exe
MyApplication (Debug).vshost.manifest
Run Code Online (Sandbox Code Playgroud)

如您所见,生成的vshost文件的命名方式不同,这会导致Visual Studio在尝试调试时抛出以下错误:

Visual Studio无法启动调试,因为缺少调试目标"D:\ Code\MySolution\MyApplication\bin\Testing\MyApplication(Debug).exe".请构建项目并重试,或者相应地设置OutputPath和AssemblyName属性以指向目标程序集的正确位置.

有趣的是,如果我AssemblyNameDebug配置更改为MyApplication …

msbuild csproj visual-studio-debugging visual-studio-2012

7
推荐指数
1
解决办法
615
查看次数

如何从代码而不是应用程序配置文件启用WCF消息日志记录

我正在使用WCF在两个进程之间进行通信.默认情况下,当出现问题时,这会产生非常模糊和简单的错误消息,这些消息不是很有帮助.

http://msdn.microsoft.com/en-us/library/aa702726.aspx上,我发现了如何启用更详细的日志记录.不幸的是,这似乎相当静止 我想从代码中进行配置(保留10个"旧"文件,指定应用程序启动时存储日志文件的路径...)但到目前为止我还没有找到任何体面的例子.

甚至可以从代码中执行此操作,并且有人可以指出我需要做什么和我需要做什么?

debugging wcf logging

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

Rx Retry()无法按预期工作

我正在尝试使用Reactive Extensions来获取一堆RSS项目.我基于Tim Greenfield的博客文章:MVVM中的Silverlight Rx DataClient.

我在桌面应用程序中使用它,但代码类似.

我遇到的问题是理解Retry()功能.它似乎没有做我期望的和我期待的.

var items = new List<RssItem>();
WebHelper.DownloadXmlFileAsync<RssItem>(new Uri(URI), "item")
    .Retry(2)
    .Finally(PublishResults)
    .Subscribe(items.Add, ProcessError, () => ProcessCompleted(items));
Run Code Online (Sandbox Code Playgroud)

当我传入一个有效的URI时,这没有任何问题.当我在URI中输入拼写错误时,它会通过ProcessError()函数报告404错误,正如人们所预料的那样,但它只报告一次.我原以为它会两次出现这个错误.

因此,似乎该Retry()函数不在我的Web请求上运行,但它看起来实际上适用于传递给的函数Subscribe().我可能在这里错了.

如何确保Retry()呼叫适用于Web请求?

额外代码:

public static class WebHelper
{
    public static HttpWebRequest CreateHttp(Uri uri)
    {
        return CreateHttp(uri, "GET");
    }

    public static HttpWebRequest CreateHttp(Uri uri, string method)
    {
        if (uri.Scheme != Uri.UriSchemeHttp && uri.Scheme != Uri.UriSchemeHttps)
        {
            throw new ArgumentException("The specified URI does not use HTTP or …
Run Code Online (Sandbox Code Playgroud)

c# system.reactive

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

使用Web部署参数时,请使用web.config中的默认值

我试图通过尝试限制使用多个环境的开销来改善我们公司的开发和部署体验.我们目前有3个环境:Debug,Test,Release.这意味着我有多个配置文件:web.Debug.config,web.Test.config,web.Release.config.

我们正在使用NuGet包来部署内部开发的库.库本身负责它使用的配置值.使用NuGet转换文件可以轻松完成此操作.因此,将包添加到项目时,正确的环境转换文件将应用于正确的.config文件.使用SlowCheetah和对csproj文件的一些手动修改,这非常有效.在开发期间切换构建配置时,使用正确的.config文件; 在创建部署包时,它还使用正确的.config文件.

当我想使用parameters.xml文件允许发布管理器在部署时更改配置值时,就会出现问题.(如何:在Web部署包中使用Web部署参数)他有时希望设置一个单独的环境来测试某些事情,同时不会干扰现有的测试环境.

理论上,使用参数文件是完美的解决方案.实际上,当没有传递任何值时,参数文件似乎无法使用相应配置文件中的配置值.这意味着,当我们提供参数文件时,我们必须为每个可能的替换值定义实际默认值.当然,这使事情变得复杂,因为它们只是所有配置的一个参数文件.始终在部署时指定每个配置值也不是首选,因为这意味着,当配置值发生更改时,我们必须在两个位置更改它:NuGet包和部署到默认环境的部署脚本.

解决问题的最简单方法是什么?如果没有填写任何值,我们如何告诉Web部署向导使用创建部署包时生成的.config文件中的默认值?

.net asp.net deployment visual-studio-2012

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

使用scope_identity()用法执行嵌套批量插入的最快方法?

在我们的一个(C#)应用程序中,我们正在插入/更新一个大图(100个插入和更新).这包含在一个事务中,因为我需要在发生错误时回滚整个事情.我们正在使用Dapper来执行SQL语句.

不幸的是,整个操作目前需要2至8秒.这是2到8秒,我们数据库中的核心表被锁定,导致其他应用程序挂起或遭受锁定.

我确定其中一个操作,插入到包含超过1.2亿条记录的表中,大部分时间都在占用,但我不确定如何优化它.

粗略地说,该表格设置如下:

table A (
  id int primary_key,
  name nvarchar
)

table B (
    id int primary_key,
    a_id int foreign_key, # has an index
    name nvarchar
)
Run Code Online (Sandbox Code Playgroud)

在插入数据时A我还需要插入相应的数据B.因此,我scope_identity()用来获取记录的id并在插入记录时使用它B.

伪观看起来如下:

# open transaction
# perform other table inserts
#
# this is one of the slowest operations
for item in list_a
    id_a = exec "insert into A (name) values (" + item.name + "); select scope_identity() as int"

    for …
Run Code Online (Sandbox Code Playgroud)

.net sql sql-server dapper

4
推荐指数
1
解决办法
1783
查看次数

如何将分支分支重置回主分支

是否可以将远程分支重置为另一个远程分支?

假设我有两个分支:masterdevelop。该develop分支由集成/构建分支组成master并用作集成/构建分支。它没有其他目的。

在冲刺结束时,所有获得批准的功能分支都将合并到主分支中。

在冲刺结束时,每个人都需要删除本地的开发分支副本,我们删除远程副本,然后从 master 制作一个新副本。这并不理想,但我们使用的策略本身就是我们商定的并且最适合或需要的策略。它松散地基于每个功能分支策略。

问题是,如果有人不删除他的本地副本并执行更新,他会收到一条消息,表明他的本地开发分支领先于远程分支。这是因为从上一个 sprint 合并但没有进入 master 的功能分支仍然在他的本地副本上。构建基础设施本身也面临风险,因为如果我们不执行完全干净的检查,我们就有可能仍然存在旧的东西。

诸如此类的操作reset --hard不起作用,它们可能会重置我的本地副本,但我无法将它们推送到远程分支。

有没有办法使用提交使开发分支与主分支完全相同,而不是重新创建它?

git branching-and-merging

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

如何在C#桌面应用程序和移动(android)设备之间通过本地网络进行通信?

我有一个C#(.net 3.5)桌面应用程序,它在屏幕上打印出一些数字.现在我想将其扩展到移动设备.(在我的情况下是Android设备.)它必须显示与计算机屏幕上相同的数字.整个事情只是一个概念的证明,它不必看起来很好,它不必100%工作,有一个很好的GUI或简单的设置,它只需要显示一些数字.

我一直在研究MonoDroid,因为它有可能使用WCF服务.(我知道移动设备和台式计算机将连接到同一个网络.)不幸的是,MonoDroid的试用版不支持真正的设备,我不想花几百美元来证明一点.

我有Java的基本知识,我想我能够使用Android SDK快速开发一个示例应用程序,从网络上的网页获取数据,解释它(XML,JSON,无论如何)并将其显示在屏幕上.

所以我的问题变成:是否有可能从现有的应用程序中创建某种Web服务(无需设置整个IIS服务器),其中包含一些带有一些XML数据的网页,我可以按给定的时间间隔刷新这些数据,可以从同一网络上的计算机访问?我应该怎么做,使用哪种技术?

或者有其他方法可以实现这样的目标吗?

c# wcf android web-services xamarin.android

-7
推荐指数
1
解决办法
6483
查看次数