众所周知,在通过IIS管理器的窗口界面编辑应用程序设置时,不允许编辑应用程序别名.应用程序的别名具有灰色(不允许更改).但在本文中,您可以通过命令行实用程序软件找到如何执行此操作:
http://www.foliotek.com/devblog/rename-applications-and-virtual-directories-in-iis7/
但还有另一种方法可以做到这一点.您可以按照本文中的说明编辑设置文件:
在设置文件中,我刚刚更改了应用程序元素的path属性的值("/ Site1"),仅此而已:
<application path="/Site1" applicationPool="DefaultAppPool">
<virtualDirectory
path="/"
physicalPath="C:\Sites\Site1" />
</application>
Run Code Online (Sandbox Code Playgroud)
问题是我不知道这两种方式是否相同并且结果相同.除了重命名应用程序名称之外,命令行实用程序(appcmd)可能会做一些额外的工作吗?
在回答我的另一个问题时,我被告知用它QueryExtensions来实现与F#和实体框架的异步计算,并且我成功地使用了这个建议.
例如,我有以下功能:
let headAsync query =
query
|> QueryableExtensions.FirstAsync
|> Async.AwaitTask
Run Code Online (Sandbox Code Playgroud)
可以这样使用:
async {
let! entity =
query {
for e in context.MyEntities do
sortBy e.Id
} |> headAsync
return entity
}
Run Code Online (Sandbox Code Playgroud)
尽管使用我的新函数作为查询表达式会很好.我写过:
type QueryBuilderEx() =
inherit Linq.QueryBuilder()
[<CustomOperation("headAsync")>]
member __.HeadAsync<'T, 'Q when 'Q :> System.Linq.IQueryable<'T>> (source: Linq.QuerySource<'T, 'Q>) : Async<'T> =
let queryable = source.Source :?> 'Q
queryable.FirstOrDefaultAsync() |> Async.AwaitTask
let query2 = QueryBuilderEx()
Run Code Online (Sandbox Code Playgroud)
并试图像这样使用它:
async {
let! entity =
query2 {
for e in …Run Code Online (Sandbox Code Playgroud) 众所周知,我可以将普通的lambda表达式转换为Expression<T>:
Func<int> foo1 = () => 0; // delegate compiles fine
Expression<Func<int>> foo2 = () => 0; // expression compiles fine
Run Code Online (Sandbox Code Playgroud)
我怎么能用异步lambda做同样的事情?我尝试过以下类比:
Func<Task<int>> bar1 = async () => 0; // also compiles (async lambda example)
Expression<Func<Task<int>>> bar2 = async () => 0; // CS1989: Async lambda expressions cannot be converted to expression trees
Run Code Online (Sandbox Code Playgroud)
有可能的解决方法吗?
我有这个简单的Java程序:
package me.fornever.javaterminal;
public class Main {
public static void main(String[] args) {
System.out.println("Console: " + System.console());
}
}
Run Code Online (Sandbox Code Playgroud)
这很简单build.gradle:
apply plugin: 'java'
apply plugin: 'application'
mainClassName = 'me.fornever.javaterminal.Main'
Run Code Online (Sandbox Code Playgroud)
当我使用它执行它时gradle --no-daemon run,我得到以下输出:
Console: null
Run Code Online (Sandbox Code Playgroud)
如果我从终端执行它gradle jar; java -cp '.\build\libs\java-terminal.jar' me.fornever.javaterminal.Main,我得到以下内容:
Console: java.io.Console@3d4eac69
Run Code Online (Sandbox Code Playgroud)
我知道当父进程使用stdout重定向时System.console()可能会返回null.是否有一些Gradle选项可以禁用重定向并使控制台完全可用于我的程序?
我正在开发一个Java的终端库,所以我想运行我的测试和可执行文件没有标准输入/输出/标准错误摇篮干预.
请注意,System.console()幸福null不是唯一的问题,但最明显的一个.在现实中,我想访问WinAPI的WriteConsoleW从执行的程序的功能gradle run,我无法使用此功能,由于同样的原因System.console()是null.因此,如果此选项可用,我确实需要在Gradle中禁用输出重定向.
另请注意,问题与Gradle build null控制台对象不同,因为该问题询问如何System.console()在Gradle脚本内部使用而不是在调用的Java程序中使用gradle run; …
考虑我有两种不同的库类型:
type Foo = { foo : string }
type Bar = { bar : int32 }
Run Code Online (Sandbox Code Playgroud)
我想实现zoo适用于任一个Foo或Bar实例的泛型函数.我无法改变Foo,Bar因为它们是图书馆代码的一部分.
下面是使用类型扩展和内联函数的解释了我的第一次尝试在这里:
// Library.fs
module Library
type Foo = { foo : string }
type Bar = { bar : int32 }
// Program.fs
type Foo with
static member zoo (f : Foo) = "foo"
type Bar with
static member zoo (b : Bar) = "bar"
let inline …Run Code Online (Sandbox Code Playgroud) 在Linux中,有一个KDE钱包(和GNOME钱包)应用程序,用于存储密码和其他敏感数据。这些钱包默认情况下会阻止除存储数据的应用程序之外的应用程序意外访问数据。
例如,如果某条数据是由存储的/bin/app1,/bin/app2则将无法完全访问该数据,钱包将首先询问用户是否真的要允许/bin/app2访问由存储的数据/bin/app1。
我发现此功能对于我参与的应用程序的本地数据安全性的某些方面很重要。
在Windows上,所提供的UX有点类似wincred.h,但据我目前所知,其中没有针对每种应用程序的任何限制。它将提供对当前用户启动的任何应用程序的数据访问,从而提供比应用程序范围的Linux钱包默认值低的安全性。
是否有任何方法可以仅使用标准API在Windows中实现类似的应用程序(或供应商)范围的安全性?
在编写基于 x86 WinAPI 的调试器时,我遇到了一种罕见的情况,即调试对象(通常运行良好)突然终止EXCEPTION_ACCESS_VIOLATION我使用本机调试器附加到调试对象(通常运行良好)后突然终止。我可以在任何应用程序上稳定地重现这一点(在 .NET Hello World 风格的应用程序和notepad.exe多台 Windows 10 计算机上尝试过)。
本质上我写了一个简单的WaitForDebugEvent循环:
CreateProcessW(L"C:\\\\Windows\\\\SYSWOW64\\\\notepad.exe", [\xe2\x80\xa6], CREATE_SUSPENDED, [\xe2\x80\xa6]);\nDebugActiveProcess(processId);\n\nDEBUG_EVENT debugEvent = {};\nwhile (WaitForDebugEvent(&debugEvent, INFINITE)) {\n switch (debugEvent.dwDebugEventCode) {\n // log all the events\n }\n ContinueDebugEvent(debugEvent.dwProcessId, debugEvent.dwThreadId, DBG_EXCEPTION_NOT_HANDLED);\n}\n\nDebugActiveProcessStop(processId);\nRun Code Online (Sandbox Code Playgroud)\n\n(这是完整列表:我不会将其全部粘贴到这里,因为那里有一些额外的非必要的样板;MCVE 有 136 行长)
\n\n为了举例,我将只记录所有调试器事件并检测调试对象是否准备好“正常进行”,或者是否会因异常而终止。
\n\n大多数时候,我的调试会话如下所示:
\n\nCREATE_PROCESS_DEBUG_EVENT(报告进程及其初始线程的创建)LOAD_DLL_DEBUG_EVENT(我一直无法获得这个 DLL 的名称,但这在 MSDN 中有记录)CREATE_THREAD_DEBUG_EVENT(我怀疑这是调试器注入的线程)LOAD_DLL_DEBUG_EVENT[\xe2\x80\xa6] \xe2\x80\x94 之后,许多 DLL 被加载到目标进程中,一切看起来都很好,进程按预期工作但有时(大约占所有运行的 1.5%),事件顺序会发生变化:
\n\n我想编写一个带签名的函数,int -> 'TEnum如果目标枚举不包含输入值,它将抛出异常.这是我的第一次尝试:
let parseEnum<'TEnum when 'TEnum : enum<int>> (value : int) : 'TEnum =
let enumType = typeof<'TEnum>
if not <| Enum.IsDefined (enumType, value) then
raise <| ArgumentException (sprintf "Invalid value of %A: %d" enumType value)
enum value
Run Code Online (Sandbox Code Playgroud)
编译器向我显示以下错误消息:"错误FS0001:此处不能使用声明的类型参数'TEnum',因为在编译时无法解析类型参数"(我认为这是因为enum具有附加约束的函数).
那么,好吧,我理解这个问题.我将使用静态解析的类型参数.这是我的第二次尝试:
let inline parseEnum2 (value : int) : ^TEnum =
let enumType = typeof<^TEnum>
if not <| Enum.IsDefined (enumType, value) then
raise <| ArgumentException (sprintf "Invalid value of %A: %d" enumType value)
enum value …Run Code Online (Sandbox Code Playgroud) 在使用EF6的C#中,我可以轻松地进行如下的异步操作:
using (var context = new MyDbContext()) {
var item = await context.SomeEntities.Where(e => e.Id == 1).FirstAsync();
DoSomething(item);
}
Run Code Online (Sandbox Code Playgroud)
我怎么能用F#异步工作流程做同样的事情?
我知道query工作流以及如何使用它代替LINQ,但我不知道如何使其正确异步(即没有永久消耗线程池,就像在C#示例中一样).这是我到目前为止所得到的(它是同步的):
use context = MyDbContext()
let item = query {
for e in context.SomeEntities
where (e.Id = 1)
head
}
DoSomething item
Run Code Online (Sandbox Code Playgroud)
我正在寻找一些操作headAsync(类似于FirstAsyncC#查询)或其他可靠的解决方案.