我需要在我的应用程序中提供脚本功能,允许客户使用我们的对象模型扩展其功能.我希望提供一些带有intellisense的集成C#/ VB.Net编辑器,但在查看AvalonEdit和ScintillaNet等产品后,它们似乎没有提供真正的代码完成,只是一个API,您可以在其中提供自己的列表弹出自动完成列表中显示的项目.
因此我想知道罗斯琳是否提供了这样的功能?从我遇到的教程和示例中可以看出,Roslyn实际上只是一个编译器服务.
作为最后的手段,客户可以使用像VS Express这样的东西,但集成的编辑器显然更好一些.
(我也遇到了Visual Studio Tools for Applications,听起来很有希望;但是在线资源已有几年历史了,而且文档/教程不存在,所以我用这个来填空.)
我将应用程序的资源保存在一个单独的DLL中,并在App.xaml中使用类似的东西在我的主EXE中引用它们: -
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MyThemesAssembly;component/Themes/Generic.xaml"/>
</ResourceDictionary.MergedDictionaries>
Run Code Online (Sandbox Code Playgroud)
当我编辑主EXE项目中的窗口时,VS2010设计器无法识别来自其他程序集的任何资源,因此我没有看到任何样式应用(不是真正的问题,因为我总是在XAML视图中工作).但是,Resharper也无法识别这些外部资源名称,因此在编辑XAML时会导致资源名称下出现大量波形.
我发现我可以通过在每个窗口和用户控件中包含上面的XAML来修复VS设计器和Resharper,但是这会对内存和/或性能产生负面影响吗?每个窗口都会获得单独的资源副本吗?
我正在显示一个Popup响应按钮单击(popup.IsOpen = true;).弹出窗口包含一个ComboBox,当我单击组合框中的一个项目时,SelectionChanged事件所做的一件事就是隐藏弹出窗口.
弹出窗口出现DataGrid在我的页面上,我发现组合框上的鼠标点击也被我在DataGrid上获得的MouseUp事件所拾取.知道发生了什么事吗?
我正在使用EF5并将POCO实体的断开连接图附加到我的上下文中,如下所示: -
using (var context = new MyEntities())
{
context.Configuration.AutoDetectChangesEnabled = false;
context.MyEntities.Attach(myEntity);
// Code to walk the entity graph and set each entity's state
// using ObjectStateManager omitted for clarity ..
context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
实体"myEntity"是一个实体的大图,有许多子集合,而这些子集合又有自己的子集合,依此类推.整个图形包含10000个实体的顺序,但通常只更改一小部分.
设置实体状态和实际的代码SaveChanges()相当快(<200ms).这就是Attach()问题,需要2.5秒,所以我想知道这是否可以改进.我已经看到了一些文章,告诉你设置AutoDetectChangesEnabled = false,我正在上面做,但它在我的场景中没有任何区别.为什么是这样?
我正在尝试读取文件并使用GZipStream对其进行压缩,如下所示:
using (var outStream = new MemoryStream())
{
using (var fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read))
{
using (var gzipStream = new GZipStream(outStream, CompressionMode.Compress))
{
fileStream.CopyTo(gzipStream);
Debug.WriteLine(
"Compressed from {0} to {1} bytes",
fileStream.Length,
outStream.Length);
// "outStream" is utilised here (persisted to a NoSql database).
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是outStream.Length始终显示10个字节.我究竟做错了什么?
我试过在线gzipStream.Close()后调用fileStream.CopyTo(正如其他论坛中所建议的那样),但这似乎也关闭outStream了,所以后续使用它的代码也会失败.
我的应用程序使用Json.Net序列化对象,压缩生成的JSON,然后将其保存到文件中.此外,应用程序可以从其中一个文件加载对象.由于现有代码创建大字符串和字节数组的方式,这些对象的大小可能是几十Mb,我担心内存使用情况: -
public void Save(MyClass myObject, string filename)
{
var json = JsonConvert.SerializeObject(myObject);
var bytes = Compress(json);
File.WriteAllBytes(filename, bytes);
}
public MyClass Load(string filename)
{
var bytes = File.ReadAllBytes(filename);
var json = Decompress(bytes);
var myObject = JsonConvert.DeserializeObject<MyClass>(json);
}
private static byte[] Compress(string s)
{
var bytes = Encoding.Unicode.GetBytes(s);
using (var ms = new MemoryStream())
{
using (var gs = new GZipStream(ms, CompressionMode.Compress))
{
gs.Write(bytes, 0, bytes.Length);
gs.Close();
return ms.ToArray();
}
}
}
private static string Decompress(byte[] bytes)
{
using (var …Run Code Online (Sandbox Code Playgroud) 快速问题-如何在Prism事件聚合器订阅者操作中调用异步方法?例如
_eventAggregator.GetEvent<PubSubEvent<SomeMessage>>()
.Subscribe((msg) => {
DoSomething();
await DoSomethingAsync();
DoSomethingElse();
});
Run Code Online (Sandbox Code Playgroud) 我目前正在从 TFS 2012 迁移到 Azure DevOps 2019(均为内部部署)。使用旧服务器,我将从我们的一些构建中手动创建 NuGet 包,并将这些.nupkg文件托管在文件共享上(在 Visual Studio 中配置为包源)。使用 DevOps,我显然可以自动化所有这些并将包直接推送到工件提要中。
旧服务器需要退役,所以我想将现有的 .nupkg 文件从文件共享中移到新的工件提要中。这可能吗?
我刚刚开始使用NHibernate 3.2及其"按代码映射"功能,并将我们的Fluent映射迁移到它.是否有一个流利的"ReadOnly();" 功能,使整个映射只读?提前致谢.
我正在尝试将 ItemTemplate 和 ItemContainerStyle 应用于 ItemsControl:-
<ItemsControl ItemsSource="{Binding LogEntries}"
ItemTemplate="{StaticResource itemTemplate}"
ItemContainerStyle="{StaticResource itemContainer}" />
Run Code Online (Sandbox Code Playgroud)
然而 ItemContainerStyle 似乎被忽略了(但如果我删除了 ItemTemplate 它确实有效)。
项目模板相当复杂,用于许多不同的视图。在一个特定视图中,我需要更改列表项的间距和背景颜色,因此我还尝试应用 ItemContainerStyle,如下所示:-
<Style x:Key="itemContainer"
TargetType="ContentPresenter">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Border x:Name="itemBorder"
Margin="4,0,4,4"
Background="#666666">
<ContentPresenter Content="{Binding}" />
</Border>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)
我有点惊讶你不能同时申请,除非我遗漏了什么?我认为 ItemContainerStyle 实际上只是项目内容的“包装器”,无论项目的内容是否模板化?
c# ×4
wpf ×3
gzipstream ×2
asynchronous ×1
azure-devops ×1
json.net ×1
nuget ×1
prism ×1
resharper ×1
roslyn ×1
stream ×1
vb.net ×1
vsta ×1