我正在使用NPOI将DataTable转换为ASP.NET Web API项目中的Excel.
但我从回应中得不到任何东西.这是我的代码:
public HttpResponseMessage GetExcelFromDataTable(DataTable dt)
{
IWorkbook workbook = new XSSFWorkbook(); // create *.xlsx file, use HSSFWorkbook() for creating *.xls file.
ISheet sheet1 = workbook.CreateSheet();
IRow row1 = sheet1.CreateRow(0);
for (int i = 0; dt.Columns.Count > i; i++)
{
row1.CreateCell(i).SetCellValue(dt.Columns[i].ColumnName);
}
for (int i = 0; dt.Rows.Count > i; i++)
{
IRow row = sheet1.CreateRow(i + 1);
for (int j = 0; dt.Columns.Count > j; j++)
{
row.CreateCell(j).SetCellValue(dt.Rows[i][j].ToString());
}
}
MemoryStream ms = new MemoryStream(); …Run Code Online (Sandbox Code Playgroud) 在VS2017 RC中,当您尝试使用新的元组语法时,您收到以下错误:
CS8179未定义或导入预定义类型'System.ValueTuple`X'
为了使用元组语法,您必须手动将ValueTuple nuget包导入到项目中.没什么大不了的,因为它是预发布版本,我认为它将在RTM中更改,因此它将默认启用.不幸的是,在最终版本中仍然如此,您必须为每个项目下载nuget包以使用元组语法.
有没有办法默认为每个项目启用元组语法?
我创建了一个自定义MarkupExtension,允许一种简单的方法将事件转发FrameworkElements到视图模型上的方法.一切都很完美,除了Visual Studio在填写XAML时不提供任何Intellisense.有什么方法可以为Visual Studio提供提供Intellisense所需的信息吗?
的MarkupExtension:
public class VmCall : MarkupExtension
{
public string ActionName { get; }
public VmCall(string actionName)
{
ActionName = actionName;
}
//.....
}
Run Code Online (Sandbox Code Playgroud)
视图模型:
class TestWindowVm : ViewModel
{
public void Click()
{
MessageBox.Show("Click!");
}
}
Run Code Online (Sandbox Code Playgroud)
使用MarkupExtensionin XAML:
<Window
x:Class="WpfLib.Tests.VmCallMarkupExtension.TestWindow"
xmlns:wpfLib="clr-namespace:AgentOctal.WpfLib;assembly=WpfLib"
//Many xmlns and attributes left out of example for brevity.
d:DataContext="{d:DesignInstance TestWindowVm}"
mc:Ignorable="d">
<Button Click="{wpfLib:VmCall Click}"/>
</Window>
Run Code Online (Sandbox Code Playgroud)
理想情况下,当用户按下"VMCALL"后的空格键,智能感知应该对所有方法的列表呈现它们当前元素的DataContext(只是Click对TestWindowVm在这个具体的例子).
如果是一些方法,使这项工作的基础上,与WinForms的以往的经验,我希望某种Attribute …
好吧,我希望我得到了async/await的基础知识,但仍有一些问题在脑海里挥之不去.
但现在我正在谈论的问题.假设在这个简单的例子中
static void Main(string[] args)
{
Method();
Console.WriteLine("Main Thread");
Console.ReadLine();
}
public async static void Method()
{
await Task.Run(new Action(LongTask));
Console.WriteLine("New Thread");
}
public static void LongTask()
{
Thread.Sleep(8000);
Console.WriteLine("Long Task");
}
Run Code Online (Sandbox Code Playgroud)
Main Thread在调用Method()并遇到等待8秒后,主线程仍然继续并打印.
因此,当遇到await时,Method()返回调用者,即返回到main函数,保存同步上下文并从那里继续执行.
它Main Thread首先打印.
然后在8秒后完成,Long Task然后New Thread打印.
这部分我得到了.我的问题在于我的申请:
public IList<createcaseoutput> createCase(CreateCaseInput CreateCaseInput,SaveCaseSearchInput SaveCaseSearchInput)
{
.............
SQL.CaseSQL.getCreateCaseParameters(CreateCaseInput, out strSPQuery, out listParam);
var AcctLst = rep.ExecuteStoredProcedure<createcaseoutput>(strSPQuery, listParam).ToList();
if (!string.IsNullOrEmpty(AcctLst.ElementAt(0).o_case_seq.ToString()))
{
await saveCaseSearch(SaveCaseSearchInput, AcctLst.ElementAt(0).o_case_seq);
}
console.writeline("Async called");
return AcctLst;
}
public async …Run Code Online (Sandbox Code Playgroud) 我有一个类TypeEntity将作为几十个实体的基类.我正在使用TPC,所以我需要将基类的所有属性映射到具有具体类名称的表,并将该Key字段设置为数据库生成.
目前我正在EntityTypeConfiguration为每个实体类型执行此操作,如下所示:
class LineItemType : EntityTypeConfiguration<Models.LineItemType>
{
public LineItemType()
{
this.Property(e => e.Key)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
this.Map(e => e.MapInheritedProperties()
.ToTable(nameof(LineItemType)));
}
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但非常重复.我必须记住为每个继承的类型创建一个配置类TypeEntity,设置键,并映射继承的属性.这似乎是一个习惯的理想情况Convention.
我创建了TypeEntityTpcConvention Convention如下:
class TypeEntityTpcConvention : Convention
{
public TypeEntityTpcConvention()
{
this.Types<TypeEntity>()
.Configure(e => e.Property(p => p.Key)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity));
}
}
Run Code Online (Sandbox Code Playgroud)
哪个设置Key为生成数据库,但我找不到任何方法来从约定内部访问属性的表映射.
理想情况下,我希望这样的事情:
this.Types<TypeEntity>()
.Configure(e => e.MapInheritedProperties()
.ToTable(e.ClrType.Name));
Run Code Online (Sandbox Code Playgroud)
或者甚至对每个需要映射的属性进行这样的调用:
this.Types<TypeEntity>()
.Configure(e => e.Property(p=>p.Key)
.ToTable(e.ClrType.Name));
Run Code Online (Sandbox Code Playgroud)
这两者似乎都不存在.有什么方法可以控制内部属性的映射Convention吗?
经过一番更多的研究,它看起来像有可作为更先进的约定选择IStoreModelConvention和IConceptualModelConvention,但有用的文档,如何使用这些严重缺乏.几个小时用断点和观察窗口戳它们之后,我还没想出如何使用这些接口来控制列映射.
我目前的解决方案是使用反射来查找继承的所有类型TypeEntity的OnModelCreating,而属性映射到正确的表.这是有效的,但我更愿意使用一个约定,如果可能的话,因为这看起来像是为了制定约定的东西.我觉得我错过了一些明显的东西.
我目前正在与一个开发团队合作开发一个Visual Basic项目,其中一些项目将在发布后立即转移到Visual Studio 2015,而一些人将在Visual Studio 2013上停留几个月.在使用RC进行测试时,我们发现Visual Studio将毫无问题地打开2013项目,但很乐意让用户使用VS 2013中用户无法使用的新语言功能,如字符串插值.如果2015用户签入此代码2013用户将收到编译错误.是否有任何项目,解决方案或Visual Studio设置会告诉编译器将功能限制为以前版本的VB.net中可用的功能?理想情况下,编译器在2015年尝试使用这些功能时应返回编译错误.
这个功能在项目属性>构建>语言版本的C#中可用,但我找不到任何VB.net的等价物,谷歌搜索失败了.
我只是想提一下,将.Net运行时版本设置为4.5没有用,因为这些新的语言功能是编译器级功能,可以在旧框架上完美运行.
我在项目的子文件夹中创建了一个类,并且命名空间与文件夹结构不匹配.Resharper强调了命名空间,并且在查看Resharper为解决问题而提出的选项时,意外地选择了"Folder not not a namespace"选项.该设置存储在哪里?我想撤消该选择,以便Resharper强制执行命名空间/目录奇偶校验,至少对于该文件夹.
我已经检查了.sln和.csproj文件,以及有问题的目录,查找可能包含该信息的任何松散文件,并且无法找到Resharper如何存储它以便将其删除.
我想了解I/O完成端口,具体如何与使用async- await为I/O.
臭名昭着的文章没有线程谈论在I/O完成后短暂借用IOCP.因为本文的重点是要表明当花哨的硬件级I/O内容在飞行中时,没有一个线程被循环消耗
I/O完成了吗?没有.I/O已经完成了吗?没有.I/O已经完成了吗?不...
但后来我正在看这篇文章说的那个
"组件负责检查排队元素的完成端口"
并给出一个例子
public class IOCompletionWorker
{
public unsafe void Start(IntPtr completionPort)
{
while (true)
{
uint bytesRead;
uint completionKey;
NativeOverlapped* nativeOverlapped;
var result = Interop.GetQueuedCompletionStatus(
completionPort,
out bytesRead,
out completionKey,
&nativeOverlapped,
uint.MaxValue);
var overlapped = Overlapped.Unpack(nativeOverlapped);
if (result)
{
var asyncResult = ((FileReadAsyncResult)overlapped.AsyncResult);
asyncResult.ReadCallback(bytesRead, asyncResult.Buffer);
}
else
{
ThreadLogger.Log(Interop.GetLastError().ToString());
}
Overlapped.Free(nativeOverlapped);
}
}
}
Run Code Online (Sandbox Code Playgroud)
var completionPortThread = new Thread(() => new IOCompletionWorker().Start(completionPortHandle))
{
IsBackground = true
};
completionPortThread.Start(); …Run Code Online (Sandbox Code Playgroud) 我目前正在开发一个可执行的C++ VS2015项目.
我有一个文件version.h,它只是定义了一堆数字.
#define VERSION_MAJOR 3
#define VERSION_MINOR 0
#define VERSION_REVISION 0
#define VERSION_BUILD 2
#define VER_FILE_VERSION VERSION_MAJOR, VERSION_MINOR, VERSION_REVISION, VERSION_BUILD
...
Run Code Online (Sandbox Code Playgroud)
此version.h用于项目的.rc文件中,以定义可执行文件的版本信息.
.rc文件看起来像
#include "resource.h"
#include "version.h"
...
VS_VERSION_INFO VERSIONINFO
FILEVERSION VER_FILE_VERSION
...
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,每次添加资源以修改resource.h时,Visual Studio 2015似乎都会删除.rc文件中的#include"version.h",而是硬编码"version"中的所有值. H".
示例.rc文件的问题
#include "resource.h"
...
VS_VERSION_INFO VERSIONINFO
FILEVERSION 3,0,0,2
...
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,如何阻止VS2015这样做呢?
c# ×7
.net ×3
async-await ×2
asynchronous ×2
c#-7.0 ×1
excel ×1
git ×1
intellisense ×1
npoi ×1
resharper ×1
tuples ×1
vb.net ×1
visual-c++ ×1
wpf ×1
xaml ×1