小编hor*_*rgh的帖子

将类转换为数组

我有一个DisplayedData类......

  public class DisplayedData
  {
    private int _key;
    private String _username;
    private String _fullName;
    private string _activated;
    private string _suspended;


    public int key { get { return _key; } set { _key = value; } }
    public string username { get { return _username; } set { _username = value; } }
    public string fullname { get { return _fullName; } set { _fullName = value; } }
    public string activated { get { return _activated; } set …
Run Code Online (Sandbox Code Playgroud)

c# arrays class

11
推荐指数
1
解决办法
1万
查看次数

无法访问excel文件

我正在开发一个Windows服务,生成一个报告.此报告有一个模板.此模板在excel文件中准备.此文件将复制到输出文件夹.

在开发过程中,我像控制台应用程序一样启动了服务,并且在访问此文件时没有任

然后我准备了服务安装程序.该服务是在Local System帐户下安装的.因此,此excel模板文件被标记为内容,并与可执行文件一起复制到安装目录.

但是当服务启动时,excel似乎无法访问此文件.该服务已安装到c:\Program Files (x86)\Our Company\Service Name\.目标操作系统是Windows Server 2008.在测试时,我使用Windows 7并遇到同样的问题.

我使用以下代码访问excel.

using Excel = Microsoft.Office.Interop.Excel;    
//...
Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
//the following line throws an exception
Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(@"path"); 
Run Code Online (Sandbox Code Playgroud)

我还试图将excel模板文件复制到一些临时目录(服务有权编写 - 这是经过测试的)并尝试从那里打开它,但没有成功(虽然这种变体在控制台应用程序中运行良好好).

错误消息sais:

Microsoft Office Excel无法访问文件/路径/.有几个可能的原因:

1. The file name or path does not exist.
2. The file is being used by another program.
3. The workbook you are trying to save has the same name as a currently open …
Run Code Online (Sandbox Code Playgroud)

c# excel interop windows-services

11
推荐指数
2
解决办法
2万
查看次数

返回List <T>的只读包装的哪种方式更可取?

比如,我们有一个带有私有List的泛型类.我们可以使它至少以两种方式返回此列表的只读包装:

public class Test<T>
{
    public List<T> list = new List<T>();

    public IEnumerable<T> Values1
    {
        get
        {
            foreach (T i in list)
                yield return i;
        }
    }

    public IEnumerable<T> Values2
    {
        get
        {
            return list.AsReadOnly();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

双方Values1Values2反映底层集合中的任何chages并防止它通过自己修改.

哪种方式更好?应该注意什么?或者还有其他更好的方法吗?

c# generics ienumerable readonly-collection

10
推荐指数
1
解决办法
1456
查看次数

如何正确设置IIS 7应用程序池标识?

将我的网站部署到IIS7.5后,我发现了一个奇怪的行为:ApplicationPoolIdentity默认情况下保留应用程序池标识(如IIS应用程序池标识中所推荐),Ninject似乎被忽略,因为我得到以下错误,同时创建了第一控制器:

System.InvalidOperationException:尝试创建类型为"..MainController"的控制器时发生错误.确保控制器具有无参数的公共构造函数.---> System.DirectoryServices.DirectoryServicesCOMException:发生操作错误.

我试图授予FullAccessIIS AppPool\<MySiteAppPool>文件夹,包含该网站(包括所有子文件夹和文件),但这并没有改变任何东西.

但是,当我将应用程序池标识设置为任何域帐户(即使是简单的帐户,没有管理权限,以及没有任何访问该站点的文件夹)时,它仍然可以正常工作.

根据通过NuGet包设置MVC3应用程序教程来安装Ninject .

我不确定,如果它是相关的,该站点应该在具有Windows身份验证的域Intranet中工作.

因此,唯一的问题似乎是应用程序池标识.至于我渴望使用推荐的方式,我很乐意拥有ApplicationPoolIdentity,而不是域帐户.

这有什么用?是否可以将所有这些混合在一起?


这是一个具有类似问题的SO线程:ASP.NET MVC 4 + Ninject MVC 3 =没有为此对象定义的无参数构造函数.但是根本没有合适的答案.


作为删除的评论建议,我尝试使用NetworkSerive身份.它运作正常.但是,我想这并不比非特权域帐户好多少.


编辑

突然发现另一个依赖:应用程序池标识用于sql server上的Windows身份验证,但我希望在那里使用客户端用户的凭据.

根据评论

同意通过模拟可以使用经过身份验证的凭据访问远程SQL Server.


但是,仍然不清楚ApplicationPoolIdentity和Ninject的问题是什么.

在这个问题的最顶部提到的文章让我想到这可能是因为虚拟帐户没有用户配置文件.这个方面对我来说仍然不清楚,因为仍然可以使IIS能够使用该LoadUserProfile属性加载用户配置文件.如果虚拟帐户没有配置文件,我无法获取,IIS将加载什么?

有人说:

IIS不会加载Windows用户配置文件,但某些应用程序可能会利用它来存储临时数据.SQL Express是执行此操作的应用程序的示例.但是,必须创建用户配置文件以将临时数据存储在配置文件目录或注册表配置单元中.NETWORKSERVICE帐户的用户配置文件由系统创建,始终可用.但是,通过切换到唯一的应用程序池标识,系统不会创建任何用户配置文件.只有标准应用程序池(DefaultAppPool和Classic .NET AppPool)在磁盘上具有用户配置文件.如果管理员创建新的应用程序池,则不会创建用户配置文件.

但是,如果需要,可以通过将"LoadUserProfile"属性设置为"true"来配置IIS应用程序池以加载用户配置文件.


我在serverfault.com上找到了以下主题:

如何将活动目录权限分配给默认应用程序池标识

在那里还指出,应用程序池标识不能用作网络服务,特别是查询AD.

c# asp.net iis-7 ninject asp.net-mvc-3

9
推荐指数
2
解决办法
6万
查看次数

作为dotnet cli工具启动时,获取“此平台不支持System.Data.SqlClient”

我们有一个使用DbContextfrom 的简单netcore 2.2控制台应用程序Microsoft.EntityFrameworkCore。从控制台启动后,它可以按预期工作。

但是,我们决定将其用作dotnet CLI工具。.csproj文件包含:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <AssemblyName>dotnet-dbupdate</AssemblyName>
    <Title>Db Updater</Title>
    <Version>1.0.1</Version>
    <PackageId>DbUpdater</PackageId>
    <Product>DbUpdater</Product>
    <PackageVersion>1.0.1</PackageVersion>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.0.0" />
  </ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

我们使用将其打包到我们的Nuget服务器dotnet pack。然后在目标文件夹中,有以下.csproj文件:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <DotNetCliToolReference Include="DbUpdater" Version="1.0.1" />
  </ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

从此文件夹中,将其还原并执行:

dotnet restore
dotnet dbupdate
Run Code Online (Sandbox Code Playgroud)

突然之间,在DbSetToList方法调用中,我们收到:

System.Data.SqlClient is not supported on this platform
Run Code Online (Sandbox Code Playgroud)

毫无疑问,将其作为dotnet CLI工具启动时存在问题。但是,我们仍然没有得到这个问题的含义和解决方法。在网络上搜索并没有给我们任何尝试的思路。

c# entity-framework .net-core dotnet-cli

9
推荐指数
1
解决办法
604
查看次数

读取空单元格,给出对象引用错误

当我通过Worksheets.Cells [2,5] .value.ToString();读取单元格时

我收到错误"System.NullReferenceException:对象引用未设置为对象的实例."

什么是检查null然后分配值的好方法,而不必有"if"语句.

c# linq epplus

8
推荐指数
1
解决办法
9648
查看次数

EntityFramework无法在App.config中看到ConnectionString

我正在和ASP.Net MVC 3一起研究Code First EntityFramework.首先,我的普通EFDbContext类被放在WebUI一个Concrete文件夹中的mvc项目中.

 public class EFDbContext : DbContext
 {
     public DbSet<Product> Products { get; set; }
 }
Run Code Online (Sandbox Code Playgroud)

它被消耗掉了

 public class EFProductRepository : IProductRepository
 {
    private EFDbContext context = new EFDbContext();

    public IQueryable<Product> Products
    {
        get
        {
            return context.Products;
        }
    }
 }
Run Code Online (Sandbox Code Playgroud)

哪里

public interface IProductRepository
{
    IQueryable<Product> Products { get; }
}
Run Code Online (Sandbox Code Playgroud)

所以我将以下代码添加到根Web.config:

 <connectionStrings>
      <add name="WebUI.Concrete.EFDbContext" connectionString="Data Source=HORGH\SQLSERVER2008;Initial Catalog=SportStore;Integrated Security=True;Pooling=False"
providerName="System.Data.SqlClient"/>
 </connectionStrings>
Run Code Online (Sandbox Code Playgroud)

它的工作.

然后我决定将它带入一个单独的Domain类库项目.我有一个App.config文件.所以我决定在那里移动我的连接字符串,它变成了:

<connectionStrings>
      <add name="Domain.Concrete.EFDbContext" connectionString="Data …
Run Code Online (Sandbox Code Playgroud)

c# connection-string web-config ef-code-first asp.net-mvc-3

8
推荐指数
1
解决办法
1万
查看次数

如何设置单元格的背景?

如何在OpenXml中设置一行(或整行)中几个单元格的背景?

阅读了几篇文章:

  1. 使用C#中的openXML在excel表中着色单元格
  2. Excel Open XML中的高级样式

我仍然无法使它工作.

我的任务实际上乍一看似乎有点容易,与这些文章中的内容略有不同.上述教程主要展示了如何创建新文档并对其进行样式化.虽然我需要改变现有的样式.

也就是说,我有一个现有的xlsx文档(报告模板).我使用必要的值填充报告(由于SO open xml excel读取单元格值MSDN使用工作表(Open XML SDK)而设法执行此操作).但接下来我需要用红色背景标记几行.

我不确定是否要使用,CellStyle或者是否应该使用CellFormat或其他东西......这就是我现在所做的:

SpreadsheetDocument doc = SpreadsheetDocument.Open("ole.xlsx", true);

Sheet sheet = (Sheet)doc.WorkbookPart
                        .Workbook
                        .Sheets
                        .FirstOrDefault();

WorksheetPart worksheetPart = (WorksheetPart)doc.WorkbookPart
                                                .GetPartById(sheet.Id);
Worksheet worksheet = worksheetPart.Worksheet;


CellStyle cs = new CellStyle();
cs.Name = StringValue.FromString("Normal");
cs.FormatId = 0;
cs.BuiltinId = 0;
//where are the style values?

WorkbookStylesPart wbsp = doc.WorkbookPart
                                .GetPartsOfType<WorkbookStylesPart>()
                                .FirstOrDefault();
wbsp.Stylesheet.CellStyles.Append(cs);
wbsp.Stylesheet.Save();



Cell cell = GetCell(worksheet, "A", 20);
cell.StyleIndex …
Run Code Online (Sandbox Code Playgroud)

c# excel openxml

8
推荐指数
1
解决办法
2万
查看次数

如何使用ClosedXml使公式单元格中的Excel换行文本

问题是,当该单元格包含引用具有一些长字符串的单元格的公式时,单元格内容不会被包装.

CodePlex上我发现了一个关于这个问题的线程和一个简单的代码来查看问题:

var generated = new XLWorkbook();
var workSheet = generated.AddWorksheet("Test");
workSheet.Cell("B1").Style.Alignment.WrapText = true;
workSheet.Cell("B1").Value = "hello hello hello hello hello";
workSheet.Cell("A3").FormulaA1 = "B1";
workSheet.Cell("A3").Style.Alignment.WrapText = true;
generated.SaveAs("Generated.xlsx");
Run Code Online (Sandbox Code Playgroud)

我还尝试手动设置行高而不是包裹单元格:

workSheet.Row(3).Height = workSheet.Row(1).Height;
Run Code Online (Sandbox Code Playgroud)

但是也没有成功.

我能做些什么吗?


在Peter Albert的评论之后,我试着制作了一排AutoFit.我在ClosedXML中唯一能找到的就是workSheet.Row(3).AdjustToContent();.但这也不起作用(既不调整某列的内容).

c# excel closedxml

8
推荐指数
3
解决办法
3万
查看次数

是否有内置的通用接口,索引器返回了协变类型参数?

在这个帖子中

如何获取null而不是按键访问字典值的KeyNotFoundException?

在我自己的回答中,我使用显式接口实现来更改基本字典索引器行为,KeyNotFoundException如果字符中没有键,则不要抛出(因为null在这种情况下我很方便获得内联).

这里是:

public interface INullValueDictionary<T, U>
    where U : class
{
    U this[T key] { get; }
}

public class NullValueDictionary<T, U> : Dictionary<T, U>, INullValueDictionary<T, U>
    where U : class
{
    U INullValueDictionary<T, U>.this[T key]
    {
        get
        {
            if (ContainsKey(key))
                return this[key];
            else
                return null;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

因为在一个真实的应用程序中我有一个字典列表,我需要一种方法来从集合中访问字典作为接口.我使用简单的int索引器来访问列表的每个元素.

var list = new List<NullValueDictionary<string, string>>();
int index = 0;
//...
list[index]["somekey"] = "somevalue";
Run Code Online (Sandbox Code Playgroud)

最简单的事情是做这样的事情:

var idict = (INullValueDictionary<string, string>)list[index];
string value …
Run Code Online (Sandbox Code Playgroud)

c# generics indexer interface covariance

7
推荐指数
1
解决办法
279
查看次数