.NET 调用Environment.UserName大部分(> 99.9% 的时间)在相同的大小写中提供用户名 - 例如Awebb. 偶尔虽然我看到AWebb. 有时,它似乎与用户在登录时输入的用户名相关联,但有时情况并非如此。
我认为这是一个糟糕的设计,用户名应该是一个用户名,大小写正确,无论如何:如果用户决定输入,aWEbb那么这并不意味着操作系统应该开始告诉应用程序这是他们的用户名。
除此之外,使用Environment.UserName? 我知道我可以将所有内容都规范化为小写/大写,但我真的在获得正确大写/格式的用户名之后。
我与大合作,和不断增长的使用内存映射文件的托管的包装文件:MemoryMappedFile,MemoryMappedViewAccessor。
我使用以下代码创建空文件:
long length = 1024L * 1024L * 1L; // 1MB
// create blank file of desired size (nice and quick!)
FileStream fs = new FileStream(filename, FileMode.CreateNew);
fs.Seek(length, SeekOrigin.Begin);
fs.WriteByte(0);
fs.Close();
// open MMF and view accessor for whole file
this._mmf = MemoryMappedFile.CreateFromFile(filename, FileMode.Open);
this._view = this._mmf.CreateViewAccessor(0, 0, MemoryMappedFileAccess.ReadWrite);
Run Code Online (Sandbox Code Playgroud)
可以正常工作,最大1GB。当我尝试2GB时,我得到了IOException:
Not enough storage is available to process this command.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.MemoryMappedFiles.MemoryMappedView.CreateView(SafeMemoryMappedFileHandle memMappedFileHandle, MemoryMappedFileAccess access, Int64 offset, Int64 size) …Run Code Online (Sandbox Code Playgroud) 我有一个公平的项目的解决方案,其中3个基于Web(在IIS/MVC站点中的WCF).构建解决方案时,它会将此分布式系统的每个组件转储到"Build"文件夹中.运行整个输出的"配置器"部分将自动在云中设置系统.它非常整洁:)然而,Web部署项目是一个主要的痛苦.他们"构建"(即部署)我构建的每一个单一时间 - 即使没有对他们各自的项目进行任何更改.
改变了一行代码?期待等待大约一分钟,以便重新部署3个Web项目.
[这些项目目前非常简单 - 两个有一个单独的.svc和一个.ashx文件 - 另一个是一个有~5个视图的MVC应用程序]
我意识到我可以改变解决方案配置而不是"构建"它们,但我一直这样做,第二天登录并忘记它很容易,并花费几个小时来追踪分布式系统中的错误一些根本没有建成的东西.
为什么我使用Web Deploy项目?好吧,因为我需要来自web项目的所有页面+二进制文件.项目本身的构建输出是'bin'文件夹,因此没有页面.整个项目文件夹?它有.cs,.csproj和其他我不想包含的文件.
这将最终建立在构建服务器上,但它现在是本地的.但我想快速将实际输出文件从Web项目获取到我的目标文件夹.有任何想法吗?
asp.net deployment web-deployment-project webdeploy microsoft-web-deploy
我知道可以在运行时使用 C#CSharpCodeProvider和 CodeDom编译 C# 代码。
是否也可以编译Java?如果不是,有没有其他选择?
我希望我的应用程序能够编译 C# 和 Java 代码。
我正在尝试将 Web API 中基于属性的路由与模型验证结合起来。我根本无法让它按照我的预期工作。
class MyRequestModel
{
[DefaultValue("DefaultView")]
public string viewName { get; set; }
[Required]
public string something { get; set; }
}
[HttpGet]
[Route("myroute/{id:minlength(2)}")]
public IHttpActionResult Test(string id, [FromUri]MyRequestModel request)
{
if (!ModelState.IsValid) { return BadRequest(ModelState); }
// process here...
return Json( /* result */ );
}
Run Code Online (Sandbox Code Playgroud)
虽然something验证正确,但我有一些问题:
something参数值时,该值通过 OK,但viewName通过 as null,但模型状态有效 - 我期望默认值,因为没有指定任何内容viewName参数 ( ?something=x&viewName=) 时,它会通过 as "DefaultView",并且模型状态有效 - 我希望它作为指定的空白字符串[FromUri],request则始终如一 …这是我先前提出的Web API属性路由和验证问题的精神继任者-可能吗?,我认为这太笼统了。这些问题大部分已解决,但默认值问题仍然存在。
基本上,我已经解决了许多难题。我有这个:
[HttpGet]
[Route("test/{id}"]
public IHttpActionResult RunTest([FromUri]TestRequest request)
{
if (!ModelState.IsValid) return BadRequest(ModelState);
return Ok();
}
Run Code Online (Sandbox Code Playgroud)
我的TestRequest课:
public class TestRequest
{
public string id { get; set; }
[DefaultValue("SomethingDefault")]
public string something { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
问题在于,如果查询字符串中没有参数something,则该模型为“有效”,但something为null。
如果我为something(GET test/123?something=)指定一个空白值,则默认值起作用,并且该模型再次有效。
为什么是这样?如何在此处将默认值输入模型?另外,为什么在未指定参数的情况下不使用默认值,而在明确指定空白字符串的情况下使用默认值呢?
(我一直在浏览ASP.NET堆栈源代码,并深陷于模型绑定器和绑定上下文中。但是我的最佳猜测不可能是正确的-看起来DefaultValueAttribute仅当参数值为时才使用null。这里不是这种情况)
我正在使用存储帐户和帐户密钥/信用证,我知道可以工作:我有一个blob容器使用完全相同的连接字符串,工作正常.
我实际上是这样做的:
CloudStorageAccount.Parse(_connectionString).CreateCloudTableClient().GetTableReference("MyTableHere").CreateIfNotExistsAsync().Wait()
(我不是在异步场景中,因此等待.与此异常无关)
它抛出一个聚合异常,单个内部异常是:
Unexpected response code, Expected:OK or NotFound, Received:NotImplemented
异常深处:
The requested operation is not implemented on the specified resource.
RequestId:30593945-0002-0019-0dde-3e30370003322
Time:2016-11-16T07:58:01.2396651Z - 在此处匿名了请求ID.
想不出还有什么可尝试的!在文档中找不到任何有关此处任何其他要求的内容.
有谁知道WebDeploy API的任何资源?有人用过吗?
我试过在官方论坛上询问,并环顾网站(那个说有'公共API'但没有链接,文章,资源,博客文章或样本的网站):http://forums.iis. net/t/1180561.aspx ..
在MSDN上有一个类列表,作为一个资源,文档记录很少,没用 - 有一篇博文上有一个使用它的应用程序,但包装了API(我的观点是,如果它是一个简单的应用程序,为什么要包装API - API不好吗?).Le fin.
我应该Process.Start继续msdeploy.exe吗?
我正在尝试复制文件夹的内容以生成输出。理想情况下,相对于output / publish文件夹位于同一路径下。我有:
<!-- front-end files to serve -->
<ItemGroup>
<Folder Include="Frontend\Content">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Folder>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
但是,当我使用时dotnet publish,没有文件被复制。
这适用于我想要的配置文件-这是由VS生成的:
<ItemGroup>
<None Remove="my-config.json" />
</ItemGroup>
<ItemGroup>
<Content Include="my-config.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
所以我的问题是-这是什么疯狂?从语义上说,一个None带有Remove属性的元素-这甚至意味着什么?
我的直觉是元素等同于“集合”,其内容将基于该元素/集合的名称进行操作,并且包含,排除,删除某种方式(?)相互作用以定义和完善内容那个。
但是,那么-什么是“文件夹”?什么是“内容”?当事情加倍时会发生什么:为什么需要“无/删除”组合?如果有的话-那是由VS生成的!
在文档方面,我发现:
https://docs.microsoft.com/zh-cn/dotnet/core/tools/csproj#how-to-see-the-whole-project-as-msbuild-sees-it,其中介绍了Compile,EmbeddedResource和None默认Glob(包括,排除和删除Glob)。我知道什么是glob,我知道这些动作的含义,但是这些glob的类型是什么?他们如何互动?
它还指向https://docs.microsoft.com/zh-cn/visualstudio/msbuild/msbuild-project-file-schema-reference?view=vs-2017的 MSBuild文档,但这似乎无济于事:它没有既没有显示文档None,EmbeddedResource或Compile元素,也没有谈到我在其他示例中找到的Content和Folder元素(由VS生成)。
实际上,我还没有发现有关这一切的任何信息。
在哪里可以找到相关文档?
c# ×5
.net ×4
webdeploy ×2
.net-core ×1
asp.net ×1
asp.net-mvc ×1
azure ×1
compilation ×1
deployment ×1
iis ×1
iis-7 ×1
java ×1
modelstate ×1
msbuild ×1
runtime ×1
validation ×1
windows ×1