刚刚安装了Visual Studio 2015 RC,当我打开Developer command prompt for VS2015并输入dnx它时说:
'dnx'不被识别为内部或外部命令,可操作程序或批处理文件.
经过两天的思考,我发现如果我输入dnvm use default它会添加一个环境变量的路径,以便dnx找到该命令.只有当前窗口打开时,此操作才会持续存在.
为什么默认的.net 5框架不会自动添加到PATH环境变量中?
我在vNext中看到一个令人不安的趋势,需要一些启发,因为我没有看到我们被视为社区的大局.为什么vNext放弃了基本的OOP范式,比如接口代替我只能描述为"基于约定的编程"?
也许我只是运气不好,我开始的课程类型是一次性的独角兽,但在短短的三天里,我一直在使用vNext,我遇到了两个似乎放弃了基本编程结构的类让我神秘莫测.
第一个是中间件类.vNext中的中间件设计为在不实现任何接口的情况下工作,也不从任何公共基类继承,但通过Invoke方法在vNext管道中神奇地调用.我们什么时候决定接口合同毫无意义?这对我来说根本没有意义.如果有第三方打算调用我的中间件,那么应该有一份合同,声明我将实施XX.它表达意图并且还提供编译时检查.没有合同就没有什么能阻止所述第三方完全改变它所期望的方法的签名,并且只在运行时你知道出了什么问题.更不用说可怜的开发者,我和我的亲戚,盯着代码无法破译应该实施的内容和生命周期事件的顺序,这些事件让我从一个点A到另一个点B.
public class SampleMiddleware // complete lack of interface implementation or base class inheritance
{
private readonly RequestDelegate _next;
public SampleMiddleware(RequestDelegate next)
{
_next = next;
}
// yet a magical method that somehow gets invoked in a pipeline.. wth..
public async Task Invoke(HttpContext context)
{
context.Response.ContentType = "text/html";
await context.Response.WriteAsync("SampleMidlleware fired!");
}
}
Run Code Online (Sandbox Code Playgroud)
第二个是在控制台应用程序中自托管的Web应用程序.当您尝试运行该命令以dnx . web仅在运行时启动自托管()时,您会收到错误,即您忘记了一个神奇的Startup类.再次,因为我缺乏术语,我只能将其描述为"基于约定的编程".在OWIN我们至少有OwinStartupAttribute可能在装配级应用.现在我们离开了,什么都没有.我的代码中没有任何内容表明我的意图是定义一个可以被第三方程序调用的启动类.
System.InvalidOperationException:在程序集"ConsoleApp1"中找不到名为"StartupDevelopment"或"Startup"的类型.
猜猜当你按照上面的例外中的"提示"时会发生什么?
System.InvalidOperationException:找不到"ConsoleApp1.Startup"类型中名为"ConfigureDevelopment"或"Configure"的方法.
失败的编程,是的宝贝!没问题,这只会使我估计需要多长时间才能运送这个应用程序.哦,你能猜出这个Startup …
寻找现有的,经过验证的解决方案,以快速生成表示现有c#对象的客户端javascript对象模型.我想有一个T4模板或其他一些方法,但我缺乏找到它的术语.我不是在谈论序列化以获取现有c#对象实例的JSON表示或与反序列化有关的任何事情.我只想为20多个c#对象生成javascript对象模型,如果c#代码发生变化,我希望能够立即重新生成它们.
我正在寻找的过度简化的例子:
C#代码:
[Serializable()]
public class Cat
{
public string Name { get; set; }
public string Breed { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
要生成的Javascript对象模型:
function Cat()
{
this.Name = "";
this.Breed = "";
}
Run Code Online (Sandbox Code Playgroud)
@Baszz
JSON是一个基于文本的数据交换标准,这不是我想要的.我需要生成一个20多个对象的客户端API,我可以将其放在一个javascript文件中,并将该脚本链接到我的各种网页.
JavaScriptSerializer可以从ac#object吐出如下所示的字符串:
{ "Name": "Hayden", "Breed": "Rabbit” }
Run Code Online (Sandbox Code Playgroud)
但这与以下内容不同:
function Cat()
{
this.Name = "";
this.Breed = "";
}
Run Code Online (Sandbox Code Playgroud)
var myCat = new Cat();
没有很多评论,所以我猜大家都是手工做或不做.看看创建我自己的T4模板来解析c#文件并生成我的客户端API.
我正在使用Knockout.js 2.0,我试图通过添加一个计算的observable来扩展我创建的构造函数的原型,但它抛出"self.IsSubDomain不是函数".我该如何解决这个错误?有没有其他方法来扩展构造函数来解决这个问题?
http://jsfiddle.net/StrandedPirate/J44S4/3/
注意:我知道我可以在构造函数的闭包中定义计算的observable,但是我正在为挖空视图模型构建一个自动代码生成器,我需要能够通过prototype属性扩展我的对象.
我正在编写一个包含自定义记录器的控制台应用程序。记录器需要将发送到Console.Error的所有内容涂成红色。现在,我有了第三方引用,这些引用也写入了Console.Out和Console.Error,因此我必须以一种也能说明它们的方式来执行此操作,因为我没有它们的源代码。我已经设置了记录器,以便任何写入控制台的代码都可以通过调用Console.SetOut&Console.SetError方法使用记录器的TextWriter。它有点工作,但我猜想有某种同步问题?在我的ErrorWriter类中,您可以看到我正在设置控制台的前景色,然后调用base.Write(),但结果与预期的不一样。来自Console.Out的应为灰色的文本显示为红色,并且在中间流时突然变为灰色。它一直在相同的字符位置上将颜色从红色变回灰色,但是我假设base.Write()实际上并不会立即吐出到控制台中。有某种滞后时间/缓冲区。我试过调用base.Flush(),但这会使Console.Out的所有文本变成红色,这甚至更糟。我该如何解决这个问题?
public class Logger
{
private static TextWriter _out;
private static ErrorWriter _error;
public Logger()
{
Initiliaze();
}
public static TextWriter Out
{
get
{
return _out;
}
}
public static TextWriter Error
{
get
{
return _error;
}
}
private static void Initiliaze()
{
if (_out == null)
_out = new StreamWriter(Console.OpenStandardOutput());
if (_error == null)
_error = new ErrorWriter(Console.OpenStandardError());
Console.SetOut(Out);
Console.SetOut(Error);
}
}
public class ErrorWriter : StreamWriter
{
// constructors omitted to save space
public override void …Run Code Online (Sandbox Code Playgroud) 在IIS 7.5上使用autofac 3.0的新MVC 4 Web应用程序.如何将依赖项注入IHttpModule?
我试过构造函数注入导致:
找不到类型'AnonymousIdentityModule'的构造函数
所以内部似乎需要一个无参数构造函数用于http模块.我也尝试了属性注入,但这导致实际上没有依赖注入.
注册
builder.RegisterType<AnonymousIdentityModule>().As<IHttpModule>().PropertiesAutowired().InstancePerHttpRequest();
Run Code Online (Sandbox Code Playgroud)
IHttpModule代码
public class AnonymousIdentityModule : IHttpModule
{
private readonly IServiceManager _serviceManager;
// this causes "constructor not found" exception
public AnonymousIdentityModule(IServiceManager serviceManager)
{
_serviceManager = serviceManager;
}
// never assigned by autofac
public IServiceManager ServiceManager
{
get { return _serviceManager; }
set { _serviceManager = value; }
}
...
}
Run Code Online (Sandbox Code Playgroud)
web.config中
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules>
<add name="AnonymousIdentityModule" type="AnonymousIdentityModule" />
</modules>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
几天前我按照这些说明将我的MVC 4应用程序升级到MVC 5 ,现在我收到以下错误.我使用Nuget(v4.3.3.13295)将DotNetOpenAuth更新为最新位,但它仍然会抛出此错误.
我该如何解决?
违反类型的继承安全规则:'DotNetOpenAuth.Messaging.OutgoingWebResponseActionResult'.派生类型必须与基本类型的安全可访问性匹配,或者不太容易访问.
有没有办法通过反射获取程序集的原始源代码位置的位置?
警告,我不是在寻找程序集的当前位置,而是在编译时位置是源代码.
例如
Given: myAssembly.dll
c:\program files\myapp\myAssembly.dll <- I'm NOT looking for this location. This is its current location.
d:\dev\myapp\main.cs <- this is the location I want; the location were the source code resided when it was compiled
Run Code Online (Sandbox Code Playgroud)
我从这开始,但到目前为止我还没有找到哪个兔子洞来获取这些信息.
Assembly.GetExecutingAssembly().GetType("myAssembly.Main").<something>
Run Code Online (Sandbox Code Playgroud)
当.Net中出现异常时,您经常会看到抛出异常的类的名称以及原始源代码文件的完整路径.这就是我所追求的.我意识到可能需要.pdb符号文件才能获得此位置.
为什么导出的箭头函数不保留其名称,是否有办法让它们这样做?
给出如下的ES6模块:
myModule.js
export function doSomeWork1() {
}
export const doSomeWork2 = () => {
};
Run Code Online (Sandbox Code Playgroud)
如果我然后将它们导入到另一个文件中,那么导出的函数会保留其名称,而箭头函数则不会.
example.js
import { doSomeWork1, doSomeWork2 } from './myModule';
console.log('doSomeWork1...');
console.log(doSomeWork1);
console.log(doSomeWork1.name); // name is retained
console.log('doSomeWork2...');
console.log(doSomeWork2);
console.log(doSomeWork2.name); // name is NOT retained
Run Code Online (Sandbox Code Playgroud)
输出:
doSomeWork1...
[Function: doSomeWork1]
doSomeWork1
doSomeWork2...
[Function]
Run Code Online (Sandbox Code Playgroud)
如果我在ES6模块中声明一个箭头函数而不导出它并直接在该文件中打印它确实保留了它的名字.
myModule.js
const doSomeWork3 = () => {
};
console.log('doSomeWork3...');
console.log(doSomeWork3);
console.log(doSomeWork3.name); // name is retained
Run Code Online (Sandbox Code Playgroud)
输出:
doSomeWork3...
[Function: doSomeWork3]
doSomeWork3
Run Code Online (Sandbox Code Playgroud) 我无法弄清楚如何在本地主机上通过 http 和 https 访问一个简单的服务。到目前为止,这是我的设置,我使用的是 traefik V2.xxx。
我希望能够同时使用 https/http 协议访问此站点(仅出于开发机器的原因)。https 工作得很好,但 http 不行。我需要添加/删除/更改哪些标签?
http://whoami.localhost:8000/
https://whoami.localhost:8443/
docker-compose.yml
version: "3.7"
services:
whoami:
image: containous/whoami
labels:
- traefik.enable=true
- traefik.http.routers.whoami.rule=Host(`whoami.localhost`)
- traefik.http.routers.whoami.entrypoints=web,web-secure
- traefik.http.routers.whoami.tls=true
- traefik.protocol=http,https
reverse-proxy:
depends_on:
- whoami
image: traefik:v2.1.1
ports:
- 8000:80
- 8443:443
- 8001:8080
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./traefik:/etc/traefik:ro
Run Code Online (Sandbox Code Playgroud)
traefik/traefik.toml
[log]
level = "DEBUG"
[accessLog]
filePath = "/logs/access.log"
bufferingSize = 20
[docker]
exposedbydefault = false
[api]
dashboard = true
insecure = true
[providers]
[providers.file]
filename = "/etc/traefik/traefik.toml"
watch …Run Code Online (Sandbox Code Playgroud) javascript ×3
asp.net-core ×2
c# ×2
.net ×1
autofac ×1
docker ×1
ecmascript-6 ×1
knockout.js ×1
model ×1
object ×1
textwriter ×1
traefik ×1
upgrade ×1