我刚刚在powershell中完成了我的第一个夜间构建脚本(第一个重要的任何脚本,真的).我似乎有一些工作得很好,如果还不是很健壮(我还没有处理过大量的错误检查),但我发现自己陷入了Invoke-Expressioncmdlet 周围的成语,我想知道我是否正确使用它.
具体来说,我使用一系列变量来构建命令行,我将用它来构建解决方案,然后运行解决方案的单元测试.例如,像:
$tmpDir = "C:\Users\<myuser>\Development\Autobuild"
$solutionPath=$tmpDir+"\MyProj\MyProj.sln"
$devenv="C:\Program Files (x86)\Microsoft Visual Studio 10.0\common7\ide\devenv"
$releaseProfile="Release"
$releaseCommandLine="`"$devenv`" `"$solutionPath`" /build `"$releaseProfile`""
Run Code Online (Sandbox Code Playgroud)
这个工作得很好,$releaseCommandLine包含我想要在我完成时执行的命令行.然后我通过这一行执行它:
$output = Invoke-Expression "& $releaseCommandLine"
Run Code Online (Sandbox Code Playgroud)
这是从powershell脚本执行手动构建的命令行的正确方法吗?我最初认为Invoke-Command会做到这一点,但我一定是做错了,因为我根本无法让它工作半小时,而且我几乎立刻就能做到这一点.
我在同一个脚本中已经按照相同的模式进行了几次.这是最好的做法吗?
我正在编写一个真正的NumericUpDown/Spinner控件作为练习来学习自定义控件创作.我已经得到了我正在寻找的大部分行为,包括适当的强制.然而,我的一项测试显示出一个缺陷.
我的控制有3个依赖属性:Value,MaximumValue,和MinimumValue.我使用强制来确保Value在最小值和最大值之间保留,包括在内.例如:
// In NumericUpDown.cs
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value", typeof(int), typeof(NumericUpDown),
new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault | FrameworkPropertyMetadataOptions.Journal, HandleValueChanged, HandleCoerceValue));
[Localizability(LocalizationCategory.Text)]
public int Value
{
get { return (int)this.GetValue(ValueProperty); }
set { this.SetCurrentValue(ValueProperty, value); }
}
private static object HandleCoerceValue(DependencyObject d, object baseValue)
{
NumericUpDown o = (NumericUpDown)d;
var v = (int)baseValue;
if (v < o.MinimumValue) v = o.MinimumValue;
if (v > o.MaximumValue) v = o.MaximumValue;
return v;
} …Run Code Online (Sandbox Code Playgroud) 通过名称进行绑定自引用与通过RelativeSource进行自引用之间有什么区别?
例如:
<!-- Self referential via name -->
<Window ...
x:Name="This"
DataContext="{Binding Path=Data, ElementName=This}"/>
Run Code Online (Sandbox Code Playgroud)
与
<!-- Self referential via RelativeSource -->
<Window ...
x:Name="This"
DataContext="{Binding Path=Data, RelativeSource={RelativeSource Self}}"/>
Run Code Online (Sandbox Code Playgroud)
在我的项目中,它们看起来表现相同,但我在窗口中直接使用它们.这意味着我立刻更喜欢前者,因为它输入较少.
RelativeSource的唯一优势是它能够在(例如)广泛使用的风格中自我引用吗?还是有一些额外的语义差异?
我环顾四周,我需要一个适用于2个或更多C++/CLI文件的Singleton类的示例.
如何在C++/CLI中声明单例,而不是C#?
如何在两个或多个C++/CLI文件中共享该单例?
当我尝试共享该单例时,我不断获得可变重定义.
(这个问题与另一个问题有关,但不同,我认为这需要在这里放置.)
这是一个(严重剪断)Window:
<Window x:Class="Gmd.TimeTracker2.TimeTrackerMainForm"
xmlns:local="clr-namespace:Gmd.TimeTracker2"
xmlns:localcommands="clr-namespace:Gmd.TimeTracker2.Commands"
x:Name="This"
DataContext="{Binding ElementName=This}">
<Window.CommandBindings>
<CommandBinding Command="localcommands:TaskCommands.ViewTaskProperties"
Executed="HandleViewTaskProperties"
CanExecute="CanViewTaskPropertiesExecute" />
</Window.CommandBindings>
<DockPanel>
<!-- snip stuff -->
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<!-- snip more stuff -->
<Button Content="_Create a new task" Grid.Row="1" x:Name="btnAddTask" Click="HandleNewTaskClick" />
</Grid>
</DockPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)
这是一个(严重剪断)UserControl:
<UserControl x:Class="Gmd.TimeTracker2.TaskStopwatchControl"
xmlns:local="clr-namespace:Gmd.TimeTracker2"
xmlns:localcommands="clr-namespace:Gmd.TimeTracker2.Commands"
x:Name="This"
DataContext="{Binding ElementName=This}">
<UserControl.ContextMenu>
<ContextMenu>
<MenuItem x:Name="mnuProperties" Header="_Properties" Command="{x:Static localcommands:TaskCommands.ViewTaskProperties}"
CommandTarget="What goes here?" />
</ContextMenu>
</UserControl.ContextMenu>
<StackPanel>
<TextBlock MaxWidth="100" Text="{Binding Task.TaskName, Mode=TwoWay}" TextWrapping="WrapWithOverflow" …Run Code Online (Sandbox Code Playgroud) 我在个人项目中使用亚马逊网络服务.我已经抓住了他们的AWS SDK for .NET,我正在使用它,但我有点困惑.
访问Web服务(在这种情况下,SimpleDB,虽然我不认为这对问题非常重要)是通过私钥/公钥对授权的.
用于创建客户端对象的AWS SDK for .NET API需要私钥:
AWSClientFactory.CreateAmazonSimpleDBClient(publicKey, privateKey);
Run Code Online (Sandbox Code Playgroud)这是一个客户端应用程序,因此代码将完全在客户端上运行.
建议客户端需要访问我的私钥才能访问SimpleDB.但亚马逊反复并强调说我的私钥不能让我的控制权.
这对我来说没有意义,所以我认为我必须遗漏一些东西.
客户端应用程序通常是亚马逊Web服务的错误模型,使用他们的AWS SDK for .NET,还是我遗漏了使客户端应用程序完全合理的东西?有没有一种很好的方法可以解决这个问题,而无需创建我自己的代理服务来验证客户端并将其请求转发给SimpleDB?
无法修改Controls集合,因为控件包含代码块(即<%...%>).
我们需要在遇到问题时访问.aspx页面中的c#变量
请指导我们?
在我进入工作岗位的那些年里,我注意到了一种我认为是反模式的明显趋势:将内部数据维护为XML的大字符串.我已经看到这种做法有很多不同的方式,尽管两个最严重的罪犯非常相似.
第一个应用程序是Web服务,可以访问SQL数据库中可能存在的大量数据.在启动时,它会将数据中的所有数据或多或少地从数据库中提取出来,并将其作为XML存储在内存中.(三次.)此应用程序的所有者将其称为缓存.我称之为缓慢,因为在对抗此问题时遇到的每个性能问题都可以直接追溯到这个问题.(这是一个企业环境,客户端因为性能故障而不是服务而受到指责应该不足为奇.)此应用程序确实使用了XML DOM.
第二个应用程序读取作为从第三方数据库导出的结果生成的XML文件.目标是将此数据导入专有系统(由我们拥有).执行此操作的应用程序读取整个XML文件,并在整个导入序列中维护至少两个(有时多达四个)XML文件的副本.请注意,可以在导入之前对数据进行操作,转换和配置,因此导入器在整个生命周期内都以XML格式拥有此数据.不出所料,当提供中等大小的XML文件时,此导入程序会爆炸.此应用程序仅将XML DOM用于其中一个副本,其余都是原始XML字符串.
我对常识的理解表明,XML 不是用于在内存中保存数据的良好格式,而是在读取和导入时,数据在输出/传输和转换为内部数据结构时应转换为XML.问题是,我经常遇到完全忽略可扩展性问题的生产代码,并且经历了大量额外的努力.(在这些应用程序中,字符串解析的绝对数量令人恐惧.)
对于其他人遇到的工作来说,这是一个常见的失败吗?或者这只是我的运气不好?或者我错过了一些令人眼花缭乱的明显和良好的情况,哪些是正确的,可以将大量数据存储在内存中作为XML?
是否有一个普遍接受的最佳实践来创建一个取消订阅自己的事件处理程序?
例如,我想出的第一件事就是:
// Foo.cs
// ...
Bar bar = new Bar(/* add'l req'd state */);
EventHandler handler = new EventHandler(bar.HandlerMethod);
bar.HandlerToUnsubscribe = handler;
eventSource.EventName += handler;
// ...
Run Code Online (Sandbox Code Playgroud)
// Bar.cs
class Bar
{
/* add'l req'd state */
// .ctor
public EventHandler HandlerToUnsubscribe { get; set; }
public void HandlerMethod(object sender, EventArgs args)
{
// Do what must be done w/ add'l req'd state
((EventSourceType)sender).EventName -= this.HandlerToUnsubscribe;
}
}
Run Code Online (Sandbox Code Playgroud)
说这种感觉很乱/坏是轻描淡写的.它与时间依赖紧密耦合(HandlerToUnsubscribe必须在恰当的时间分配精确值).在这种情况下,我觉得我必须扮演一个复杂的角色 - 我有什么愚蠢或简单的东西吗?
我正在创建UI和Winforms中的专有命令基础结构之间的绑定(使用ICommandSystem.Windows.Input中的有用).绑定基础结构的一个方面是,在UI命令组件(如工具栏按钮或菜单项)之间创建绑定的用户可以选择侦听命令的CanExecuteChanged事件,然后根据该状态更新UI的状态 …
c# ×3
wpf ×3
data-binding ×2
.net ×1
asp.net ×1
c#-4.0 ×1
c++-cli ×1
contextmenu ×1
elementname ×1
f# ×1
powershell ×1
scripting ×1
secret-key ×1
security ×1
singleton ×1
xaml ×1
xml ×1