我要求在给定位置搜索指定内容的文件.这些文件将通过Web应用程序(可能不一定在同一台服务器上)进行搜索,并且应该近乎实时更新.
在浏览了扫描工具/代码之后,我找到了这个答案,表明您可以通过编程方式挂钩Windows内置的Windows搜索功能.
使用下面的代码(或多或少的答案代码和一些小调整),我已经能够在我的机器上成功地完成这项工作:
public class WindowsSearchScanner
{
private const string Query = @"SELECT System.ItemName FROM SystemIndex WHERE scope ='file:{0}' and FREETEXT('{1}')";
public void DoSearch(string criteria, string path)
{
string connectionString = "Provider=Search.CollatorDSO;Extended Properties=\"Application=Windows\"";
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
string query = string.Format(Query, path, criteria);
OleDbCommand command = new OleDbCommand(query, connection);
connection.Open();
List<string> result = new List<string>();
OleDbDataReader reader = command.ExecuteReader();
int count = 0;
while (reader.Read())
{
result.Add(reader.GetString(0));
Console.WriteLine(reader.GetString(0));
count++;
}
Console.WriteLine(count + " Records Found"); …
Run Code Online (Sandbox Code Playgroud) 我一直在阅读快速文档,并在操场上工作.我不得不承认我对Objective-C/iOS开发没有任何了解(至少在Xamarin之外).在我看来,协议看起来与C#界面完全相同.
然而,我注意到在网上四处看看,Objective-C有一个协议(源)和一个接口的概念(虽然我不确定区别是什么).Swift似乎没有两者 - 只是协议.
有人可以解释一下,协议和C#接口之间的区别/关系是什么?
更新:我理解答案可能在功能上与列出的副本相同,但我认为,鉴于这是在询问不同的语言,这个问题仍然有其自身的优点.毕竟,swift的新开发人员可能不了解Java(除了Javascript,我没有).期望某人知道完全不同的语言系统,以便得到他们的问题的答案有点多,不是吗??这在元的讨论,也讨论这个问题.
我创建了一个基本的webAPI项目(检查了webAPI的空白Web项目)并将owin nuget包添加到项目中.
然后我创建了一个Logging类,并通过启动将其连接起来
using AppFunc = System.Func<System.Collections.Generic.IDictionary<string, object>, System.Threading.Tasks.Task>;
public class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
Debug.WriteLine("Startup Called");
var config = new HttpConfiguration();
WebApiConfig.Register(config);
appBuilder.UseWebApi(config);
appBuilder.Use(typeof(LoggingMiddleware));
}
}
public class LoggingMiddleware
{
private AppFunc Next { get; set; }
public LoggingMiddleware(AppFunc next)
{
Next = next;
}
public async Task Invoke(IDictionary<string, object> environment)
{
Debug.WriteLine("Begin Request");
await Next.Invoke(environment);
Debug.WriteLine("End Request");
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行项目并打开默认页面时,我看到调用了Begin/End请求(两次,因为它发生了,不知道为什么会这样).
但是,如果我尝试调用/api
路由(例如`/ api/ping /'),请求成功完成,但我没有在日志中看到Begin/End请求状态.
我错过了什么?
刚刚安装了VS2015 Update 1,我发现了C#Interactive窗口.
根据该系列的第二篇文章,您应该能够从解决方案中导入项目.
如果要启动C#Interactive Window,只需右键单击解决方案并选择"从项目重置交互"
但是,我的项目中没有此选项.我正在使用控制台应用程序进行测试,并将框架从4.5推升到4.6.1.但是,这没有奏效.
此外,我试图手动导入项目.看一下网站上的截图,我应该可以这样做:#r "ConsoleApplication7.exe"
但是当我这样做时,我得到以下异常:
(1,1):错误CS0006:找不到元数据文件'ConsoleApplication7.exe'
它将通过文件路径引入,例如:
#r "bin\Debug\ConsoleApplication7.exe"
Run Code Online (Sandbox Code Playgroud)
但是,这有点笨拙.特别是因为无论何时对类进行更改,都需要#reset
重新导入.
有没有更好的方法将项目导入立即实例?
继MS的本教程之后,我为Roslyn创建了一个分析器.
根据该页面,您可以将规则标记为DiagnosticSeverity.Error
,这将导致构建中断:
在声明"规则"字段的行中,您还可以将要生成的诊断的严重性更新为错误而不是警告.如果正则表达式字符串不解析,则Match方法肯定会在运行时抛出异常,您应该像编译C#编译器错误一样阻止构建.将规则的严重性更改为DiagnosticSeverity.Error:
内部静态DiagnosticDescriptor Rule = new DiagnosticDescriptor(DiagnosticId,Title,MessageFormat,Category,DiagnosticSeverity.Error,isEnabledByDefault:true,description:Description);
在我的代码中,我已经或多或少地创建了规则,如下所示:
private static readonly DiagnosticDescriptor Rule =
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, Category,
DiagnosticSeverity.Error, true, helpLinkUri: HelpUrl);
Run Code Online (Sandbox Code Playgroud)
这条规则很好.它会抛出红线,它会在错误列表中显示消息.但是,构建成功,我能够成功运行该应用程序.
注意:我已创建此规则以捕获Thread.Sleep
此示例.
是否需要额外的设置来确保规则中断构建?
我使用Prism和MVVM创建了一个基本应用程序.到目前为止,它只包含Shell和一个View/ViewModel.
在应用程序加载期间,我将View加载到我的主区域,并在屏幕上显示.这有效,但我不能让视图上的文本框集中.它看起来像光标在盒子(尽管它不闪烁),但直到我点击文本框不接受文本输入.
我在一个新项目中重新创建了这个,我所做的就是安装prism/prism.unityextensions,设置shell和视图,并将视图加载到shell区域.xaml文件后面的代码都没有.
贝壳
<Window x:Class="MVVMFocusTest.Shell"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:prism="http://www.codeplex.com/prism"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DockPanel LastChildFill="True">
<ContentControl Name="MainRegion" DockPanel.Dock="Top" prism:RegionManager.RegionName="MainRegion" />
</DockPanel>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
视图1
<UserControl x:Class="MVVMFocusTest.View1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<StackPanel>
<Grid FocusManager.FocusedElement="{Binding ElementName=Username}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Label Grid.Row="0" Grid.Column="0">Username</Label>
<TextBox Name="Username" Grid.Row="0" Grid.Column="1" ToolTip="Enter Username" TabIndex="0" />
<Label Grid.Row="1" Grid.Column="0">Password</Label>
<PasswordBox Grid.Row="1" Grid.Column="1" Name="LoginPassword" PasswordChar="*" ToolTip="Enter Password" TabIndex="1" />
</Grid>
</StackPanel>
</UserControl> …
Run Code Online (Sandbox Code Playgroud) 尝试通过我的机器上的批处理文件运行MSBuild时,我开始收到以下错误.
C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v14.0\AppxPackage\Microsoft.AppXPackage.Targets(283,22):错误MSB4086:尝试对"10.0.11000.0"进行数值比较,其值为" 10.0.11000.0"而不是数字,条件为''$(TargetPlatformVersion)'> = '10 .0.11000.0'".[MyProject.csproj]
这发生在解决方案中的几个不同项目中.
我目前正在运行VS2015(更新3).我在星期五从Update 2更新了.所以这可能是相关的.
基于在线的各种帖子(例如这个帖子),似乎(至少在过去的某个时刻)由Resharper引起.但是,我已将Resharper更新到最新版本,并在安装时运行修复,但无济于事.我甚至试图在Visual Studio中暂停它.
我还试图修复VS215安装本身.但我仍然得到错误.
我该如何解决这个错误?
更新
所以当我运行这个批处理文件时,它正在运行VisualStudioVersion=12.0
.这似乎是问题的一部分.当我在12.0
构建中重新命名它运行正常.
检查抛出异常的目标文件,您可以在第283行看到:
<PropertyGroup>
<SdkIsRS1OrLater>False</SdkIsRS1OrLater>
<SdkIsRS1OrLater
Condition="'$(TargetPlatformVersion)' >= '10.0.11000.0'">True</SdkIsRS1OrLater>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
所以我不完全确定为什么会这样,但它似乎是来自MS的目标文件中的一个问题?
我正在尝试创建一个oWin中间件类,该类将捕获堆栈中的所有异常并进行适当处理。一种
下面这个文章,我创建了一个IExceptionHandler
类来传递从的WebAPI异常成中间件堆栈。
但是,这似乎不起作用。尽管该HandleCore
方法已被调用并被执行info.Throw()
,但该异常从未出现在Middleware类中。
异常处理程序
public class WebApiExceptionPassthroughHandler : ExceptionHandler
{
public override Task HandleAsync(ExceptionHandlerContext context, CancellationToken cancellationToken)
{
HandleCore(context);
return Task.FromResult(0);
}
public override void Handle(ExceptionHandlerContext context)
{
HandleCore(context);
}
private void HandleCore(ExceptionHandlerContext context)
{
//Pass webAPI Exceptions up the stack to the Logging Middleware - which will handle all exceptions.
if (!ShouldHandle(context)) return;
var info = ExceptionDispatchInfo.Capture(context.Exception);
info.Throw();
}
public override bool ShouldHandle(ExceptionHandlerContext context)
{
return context.ExceptionContext.CatchBlock.IsTopLevel;
}
}
Run Code Online (Sandbox Code Playgroud)
启动
public …
Run Code Online (Sandbox Code Playgroud) 我们最近从2010年升级到TFS 2015.由于这次升级,我们希望C# 6
在我们的项目中开始使用语法,但每当我们这样做时,由于语法错误,构建失败.构建代理/控制器也来自TFS 2015安装程序(它是一组全新的服务器)
我们的构建使用TfvcTemplate.12.xaml
Process模板,它显然是TFS2013 xaml构建模板.
根据此答案,您可以修改模板以适当地设置ToolsVersion,但我们的模板没有Run MSBuild for Project
项目,它有一个Run MSBuild
活动,没有指定的属性.
我也尝试从这个答案的Build Definition中设置MSBuild tv:14.0
和/p:VisualStudioVersion=14.0
参数,但这也无法解决问题.
为了使构建接受C# 6
语法,我们需要做些什么?
我有一个PowerShell脚本,它查看VS安装列表,并确定安装的最高版本.然后它使用该版本的InstallDir,并使用它来访问各种命令.
但它仍然使用较低版本.
从VS2017开始,似乎不再以相同的方式保存注册表项.我需要更新脚本才能找出2017年的设置.
#Add New Versions to this list when new versions of VS are released
$VsVersionsToDisable = "10.0", "11.0", "12.0", "14.0"
[System.Collections.ArrayList]$VsVersions = $VsVersionsToDisable
#Find the Highest installed VS Version, and use it for the TFS.exe Command.
foreach ($version in $VsVersions | Sort-Object -Descending)
{
$keyPath = "HKCU:\Software\Microsoft\VisualStudio\$version`_Config"
If (Test-Path $keyPath)
{
$aliasPath = Get-ItemProperty -Path $keyPath | Select-Object `
-ExpandProperty InstallDir
$proxyPath = Join-Path $aliasPath "tf.exe"
set-alias proxyTF $proxyPath
}
}
Run Code Online (Sandbox Code Playgroud)
要避免XY问题:我们使用此脚本为用户配置TFS代理设置.它确定最高安装版本,使用它来查找代理,然后迭代通过配置其代理设置的较低版本使用相同的值.
确定tf.exe …
我是Xcode开发的新手(我正在使用swift),并在故事板中构建我的应用程序流程.我正在尝试使用与日历应用程序类似的样式创建"添加新"对话框.
在结构方面,我有一个UITableViewController
,有一个 UINavigationItem
就可以了(有一个UINavigationController
之前在故事板.我已经添加了UIBarButtonItem
与添加标识,并建立了一个Segue公司从它到一个新的UIViewController
,使用"当前模态"选项使视图从底部显示.
在"添加新"屏幕上,我想在顶部有一个导航栏,带有取消按钮,保存按钮和页面标题(与日历应用添加事件视图的工作方式相同).
最初,我想我只是将UIToolBar项目放到页面上并手动创建这些项目.但是,苹果标准似乎表明工具栏应该只出现在屏幕的底部,而不是顶部.
我可以将Segue改为"Show",这会导致视图从右侧滑入.它还将左手按钮设置为"后退"动作(即"
我应该用这个苹果批准的结构是什么?总结一下,我想做以下事情: