小编Gen*_*e S的帖子

.Net核心类库的条件编译符号

我创建了一个.Net Core R2类库,它有一些我用于几个不同平台的常用代码.某些代码在.Net Core平台中无效,因此我希望将其包含在条件编译符号中.我首先搜索了互联网,看看我是否能找到一个内置符号(如Silverlight应用程序的SILVERLIGHT和Windows 8应用程序的WINFX_CORE),但无法找到任何信息,所以我决定创建自己的符号.这似乎也不起作用.

从我阅读的所有内容中添加和使用符号应该很简单,只需在Project Properties中为条件编译符号添加一个值即可 构建标签.我做到了,但似乎确实有效.这里有几个屏幕截图......

在此输入图像描述

在此输入图像描述

请注意,我NET_CORE在条件编译符号中添加了一个值,但是当我在代码中使用它时,代码不会被忽略.

1)是否有人知道.Net Core平台是否有内置符号(我使用的是R2)?

2)如果没有,我在创建自己的符号时做错了什么?

.xproj文件:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion>
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
  </PropertyGroup>
  <Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.Props" Condition="'$(VSToolsPath)' != ''" />
  <PropertyGroup Label="Globals">
    <ProjectGuid>253184d7-9b42-4233-a871-8cfa3ee9e83e</ProjectGuid>
    <RootNamespace>Linq2Db.NetCore</RootNamespace>
    <BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">.\obj</BaseIntermediateOutputPath>
    <OutputPath Condition="'$(OutputPath)'=='' ">.\bin\</OutputPath>
    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
    <SccProjectName>SAK</SccProjectName>
    <SccProvider>SAK</SccProvider>
    <SccAuxPath>SAK</SccAuxPath>
    <SccLocalPath>SAK</SccLocalPath>
  </PropertyGroup>
  <PropertyGroup>
    <SchemaVersion>2.0</SchemaVersion>
  </PropertyGroup>
  <Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.targets" Condition="'$(VSToolsPath)' != ''" />
</Project>
Run Code Online (Sandbox Code Playgroud)



更新: 我能够使用提供的答案中的链接解决此问题.这是细节......

最初project.json文件看起来像这样......

{
  "dependencies": {
        "NETStandard.Library": "1.5.0-rc2-24027"
  },
  "frameworks": {
    "netstandard1.5": {
      "imports": …
Run Code Online (Sandbox Code Playgroud)

c# conditional-compilation .net-core-rc2

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

使用静默安装将Java安装到带空格的目录中

我正在尝试使用静默模式安装Java,并指定包含空格的安装目录.当我这样做时,它弹出"Windows Installer"对话框,指示其中一个参数不正确.如果我使用短路径名称它可以正常工作,但我真的不想使用短目录名称,因为这是存储在注册表中的值.

我想要使​​用的命令......

jre-6u39-windows-i586.exe /s INSTALLDIR="C:\Program Files (x86)\Java"
Run Code Online (Sandbox Code Playgroud)

这会弹出Windows Installer对话框.

当我用...

jre-6u39-windows-i586.exe /s INSTALLDIR=C:\Progra~2\Java
Run Code Online (Sandbox Code Playgroud)

这有效.

注意:"Program Files(x86)"只是一个例子.它安装在客户端站点并且他们选择安装目录,因此我们必须能够支持他们可能指定的任何目录.

知道如何进行静默安装,但仍然使用长路径名称?

更新:

我想我会分享最终解决方案.我发现我想分享的一个很酷的事情是你可以禁止自动重启安装,它会返回3010的退出代码.因此你可以将重新启动推迟到另一个时间.这是代码(重写了一点,以消除一堆我们自己的抽象)

public bool InstallJava(string installPath, string logFile)
{
    bool rebootRequired = false;

    string fullLogFileName = Path.Combine(logFile, "JavaInstall.log");
    string arguments = string.Format("/s /v\"/qn REBOOT=Suppress INSTALLDIR=\\\"{0}\\\" STATIC=1 /L \\\"{1}\\\"\"", installPath, fullLogFileName);

    ProcessStartInfo startInfo = new ProcessStartInfo { RedirectStandardError = true, RedirectStandardOutput = true, RedirectStandardInput = true, UseShellExecute = false, CreateNoWindow = true, 
    FileName = "jre-7u25-windows-x64.exe",  Arguments = arguments };

    var process = Process.Start(startInfo); …
Run Code Online (Sandbox Code Playgroud)

java windows command-line install cmd

6
推荐指数
1
解决办法
9213
查看次数

进程的可用内存

我正在尝试获取进程中的可用内存,以确保不会出现 OutOfMemoryException。我在互联网上搜索并找到了几个如何获取内存使用但不可用的示例。

让我提供用例...

我有一个正在执行批量插入的进程(使用 SqlBulkCopy)。我正在传递一个DataTableWriteToServer方法中。我不能使用 aDataReader因为我必须能够在失败时重试该过程。我的第一个想法是一次选择任意数量的行插入,比如 50,000。但这是一个不知道数据的通用过程;它不知道列数,也不知道每行中的数据量。所以我想我可以在我向 中添加行时监视内存DataTable,然后SqlBulkCopy在它接近耗尽内存时将其发布到。

这是一种有效的方法还是有更好的方法?
如果这是一种有效的方法,我将使用什么函数来确定可用内存量?

到目前为止,这是我的代码......这AvailableMemoryIsLow是我无法弄清楚如何确定的。

// m_buffer is a read-once cache (implements IDataReader) that pulls 
// data from an external source as needed so it uses very little memory.
// My original implementation just used m_buffer as the parameter of 
// WriteToServer but now I have to add retry logic into the process.

DataTable dataTable = new DataTable(m_tableName); …
Run Code Online (Sandbox Code Playgroud)

c# c#-4.0

5
推荐指数
1
解决办法
2392
查看次数

在.NET 4.5中加载大型XSLT时,异常"样式表太复杂"

我在尝试加载XSLT样式表时遇到异常.XSLT样式表非常大(近8,000行).不幸的是,我对此没有任何控制权,而且我无法重构样式表以使其变小.

我们最近升级到.Net Framework 4.5.以下命令在升级之前工作得很好(我们使用的是.Net Framework 4.0).在升级之后,我们收到一条XsltException说"样式表太复杂"的transform.Load行.

我希望有一些新设置可以说"让这个命令按照它在4.0中的方式工作",但我找不到任何地方.

有没有人知道为什么这可能会突然成为4.5版本中的一个问题?怎么解决?

XslCompiledTransform transform = new XslCompiledTransform();
transform.Load(XmlReader.Create(report), new XsltSettings { EnableScript = true }, new XmlUrlResolver());
Run Code Online (Sandbox Code Playgroud)

report 是一个包含大型XSLT样式表的MemoryStream.

c# xslt .net-4.5

5
推荐指数
1
解决办法
5430
查看次数

Javascript不是从Typescript生成的

我正在使用Visual Studio 2015和Typescript创建Aurelia应用程序.我正在使用ASP.Net Core 1.0 R2.

在我编译应用程序之前,生成.js文件并在.ts文件之后显示(见图像).

在此输入图像描述

昨天我做了一些他们停止生成的事情,我不知道我做了什么.我正在学习Typescript,所以对此不熟悉,开始知道在哪里看.我在互联网上搜索的唯一结果告诉我.js文件是在appBundle.js文件中创建的,但我认为这是旧信息,因为这不是我昨天之前看到的行为,而我的Aurelia应用程序没有运行,因为它说它无法找到.js文件.

任何人都可以了解我需要做什么才能再次生成.js文件?

更新:

我删除了app.html和app.ts文件并重新创建它们,然后重建项目,突然.js文件都出现了和我的应用程序现在运行正常.

在此输入图像描述

不知道为什么这个问题解决了,可能是bug.

有人有任何见解吗?

javascript typescript visual-studio-2015 aurelia asp.net-core

5
推荐指数
1
解决办法
2629
查看次数

使用HtmlAgilityPack将样式属性添加到Html的更好方法

我正在使用HtmlAgilityPack.我正在搜索所有P标签并在P标签内的样式中添加"margin-top:0px".

正如你所看到的那样,它有点"强制"使用margin-top属性.似乎必须有一个更好的方法来使用HtmlAgilityPack,但我找不到它,并且HtmlAgilityPack文档不存在.

谁知道更好的方法?

HtmlNodeCollection pTagNodes = node.SelectNodes("//p[not(contains(@style,'margin-top'))]");

if (pTagNodes != null && pTagNodes.Any())
{
    foreach (HtmlNode pTagNode in pTagNodes)
    {
        if (pTagNode.Attributes.Contains("style"))
        {
            string styles = pTagNode.Attributes["style"].Value;
            pTagNode.SetAttributeValue("style", styles + "; margin-top: 0px");
        }
        else
        {
            pTagNode.Attributes.Add("style", "margin-top: 0px");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


更新:我已根据Alex的建议修改了代码.仍然想知道HtmlAgilityPack中是否有一些内置功能可以以更"DOM"的方式处理样式属性.

const string margin = "; margin-top: 0px";

HtmlNodeCollection pTagNodes = node.SelectNodes("//p[not(contains(@style,'margin-top'))]");

if (pTagNodes != null && pTagNodes.Any())
{
    foreach (var pTagNode in pTagNodes)
    {
        string styles = pTagNode.GetAttributeValue("style", "");
        pTagNode.SetAttributeValue("style", styles + margin);
    }
}
Run Code Online (Sandbox Code Playgroud)

html c# html-agility-pack

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

Visual Studio 2012自动启动Web项目

我正在使用Visual Studio 2012.我创建了几个Web应用程序.有一次,我将项目设置为在运行启动项目时自动启动.现在我想改变那个选项,这样它们就不会启动,但我无法在任何地方找到它.我搜索了包括SO在内的互联网,似乎无法找到合适的关键字来查找能给我答案的搜索结果.它让我疯了!

有人可以告诉我如何告诉VS 2012不要自动启动?

visual-studio-2012

4
推荐指数
1
解决办法
1427
查看次数

从数据库中获取表的列表

谁能告诉我如何从C#中获取Visual FoxPro数据库中的表列表?

我尝试使用GetSchema但是回来的信息似乎只是计数(并不准确计算).

这是我的......

string connSrc = @"Provider=VFPOLEDB.1;Data Source=myvfpdb.dbc";
using (var cmdSrc = new OleDbCommand())
using (var dbconnSrc = new OleDbConnection(connSrc))
{
    dbconnSrc.Open();
    DataTable schema = dbconnSrc.GetSchema();
}
Run Code Online (Sandbox Code Playgroud)

我认为可能有某种方式我可以直接打开dbc文件并对它运行SELECT但问题是数据库位于连接字符串的路径中.我找不到可以提取架构信息的OleDb命令.

编辑:

我找到了一种有效的方法,但看起来有点笨重.有人知道更好的方法吗?

string connSrc = @"Provider=VFPOLEDB.1;Data Source=myvfpdb.dbc";
using (var conn = new OleDbConnection(connSrc))
    dbc = conn.DataSource;

string path = Path.GetDirectoryName(dbc);
string database = Path.GetFileName(dbc);

using (var conn = new OleDbConnection(@"Provider=VFPOLEDB.1;Data Source=" + path))
{
    conn.Open();
    using (var cmd = conn.CreateCommand())
    {
        cmd.CommandText = "SELECT * FROM " + …
Run Code Online (Sandbox Code Playgroud)

c# oledb visual-foxpro

4
推荐指数
1
解决办法
1555
查看次数

GetHashCode用于多个布尔值

在下面的StackOverflow 问题中, Jon Skeets的回答指出了一个很好的实现是......

// Note: Not quite FNV!
public override int GetHashCode()
{
    unchecked // Overflow is fine, just wrap
    {
        int hash = (int) 2166136261;
        // Suitable nullity checks etc, of course :)
        hash = (hash * 16777619) ^ bool1.GetHashCode();
        hash = (hash * 16777619) ^ bool2.GetHashCode();
        return hash;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果两个字段都是bool怎么办?这仍然是一个很好的实现还是会有点矫枉过正?如果这有点过分,那么GetHashCode当所有字段都是bool类型时,推荐的实现方法是什么?

在我的情况下,我只比较两个布尔.

c# boolean gethashcode

3
推荐指数
1
解决办法
509
查看次数

似乎无法伪造RNGCryptoServiceProvider

我正在将我们的单元测试从Moles转换为新的VS 2012 Fakes.我们的几个单元测试"假" RNGCryptoServiceProvider.我们能够"mole"这个,但似乎在假货中没有为它创造了Shim.换句话说,我希望找到一个ShimRNGCryptoServiceProvider.

更有趣的一点是,我在网上找到了一本名为"使用Microsoft Fakes进行更好的单元测试"的电子书.在那里,他们展示了伪造随机函数的一个例子.这是一个例子.

System.Fakes.ShimRandom.Constructor = (real) => { };        
System.Fakes.ShimRandom.AllInstances.NextDouble = this.NextDouble; 
System.Fakes.ShimRandom.AllInstances.NextInt32Int32 = this.NextInt32Int32; 
private int NextInt32Int32(Random random, int i, int arg3) 
{ 
    return (i + arg3) / 2; 
}
Run Code Online (Sandbox Code Playgroud)

我甚至没有在我的项目中看到System.Fakes.ShimRandom.我看到 的唯一两个垫片System.FakesShimDateTimeShimGuid.

  • 我为System创建了Fakes程序集(它给了我mscorlib.4.0.0.0.Fakes和System.4.0.0.0.Fakes)
  • 我没有更改配置文件(mscorlib.fakes和System.fakes)
  • 我将我的Fakes项目设置为"Any CPU"平台.
  • 我们正在使用.Net Framework 4.5和VS 2012 Ultimate.

我确实看到了一堆Stubs,包括System.Fakes.StubRandomSystem.Fakes.StubRandomNumberGenerator,但是Stubs对我不起作用,因为我无法将它们注入到被测试的代码中.

  1. 知道为什么我没有得到ShimRandom,因为在电子书中有一个例子吗?
  2. 我怎么"假" RNGCryptoServiceProvider

c# unit-testing microsoft-fakes visual-studio-2012

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

HtmlAgilityPack用换行符替换段落标记

我们使用的第三部分导出应用程序将无法正确呈现段落标记(不包括段落之间的额外行),因此我尝试使用HtmlAgilityPack将所有段落标记替换为两个换行标记.

这是我到目前为止所拥有的......

// Shortened for this example
string rawHtml = "<p><strong><span>1.0 Purpose</span></strong></p><p><span>The role</span></p><p><span>NOTE: Defined...</span></p>";

HtmlDocument doc = new HtmlDocument();
HtmlNode.ElementsFlags["br"] = HtmlElementFlag.Empty;
doc.LoadHtml(rawHtml);
doc.OptionWriteEmptyNodes = true;

// Updated using suggestion from Petr
HtmlNode linebreak = doc.CreateElement("br"); 
var paragraphTags = doc.DocumentNode.SelectNodes("p");
for (int i = 0; i < paragraphTags.Count; i++)
{
    HtmlNode childNode = HtmlNode.CreateNode(paragraphTags[i].InnerHtml);
    HtmlNode nextNode = paragraphTags[i];

    if (i > 0)
    {
        nextNode = doc.DocumentNode.InsertAfter(linebreak, nextNode);
        nextNode = doc.DocumentNode.InsertAfter(linebreak, nextNode);
    }
    doc.DocumentNode.InsertAfter(childNode, nextNode);
    paragraphTags[i].Remove();
}
Run Code Online (Sandbox Code Playgroud)

它确实删除了段落标记,但只渲染了一个换行符.我已经搜索了互联网以获得尽可能多的东西,但似乎没有任何效果.

OuterHtml看起来像这样....

<strong><span>1.0 Purpose</span></strong><br …
Run Code Online (Sandbox Code Playgroud)

c# html-parsing html-agility-pack

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

运行 Windows 服务时拒绝访问

我使用 ASP.Net Core 3.x 和 C# 创建了一个 Windows 服务。我在构建项目时从新的 Windows 服务模板开始。当我从我的开发环境或控制台窗口运行它时,它运行良好。当我将其安装为 Windows 服务并尝试启动该服务时,出现“错误 5:访问被拒绝”。错误。

我尝试了很多事情,我将在下面概述以消除错误,但似乎没有任何效果,所以我下载了 Microsoft 提供的示例应用程序,示例

相同的结果...当我从 Visual Studio 中运行示例应用程序时,它运行良好,作为服务运行时,我收到拒绝访问错误。

  • 我在我是管理员的本地机器上运行所有这些。

  • 我最初尝试使用默认的本地系统帐户运行它;收到拒绝访问错误。我将登录身份更改为我的域帐户,与我用来登录本地计算机的相同,该计算机是本机的管理员;得到相同的访问被拒绝错误。

  • 我的帐户具有作为服务运行的权限集。

  • 事件查看器只显示一条消息“拒绝访问”,没有创建其他消息。

  • 我相信在执行 C# 代码之前就发生了拒绝访问错误。让我相信这是我在 Program.Main.. 的最顶部添加了一行File.WriteAllText("C:\\temp\\ws.log", $"Test of Worker Service @ {DateTime.Now}. Content Root Path: {AppContext.BaseDirectory}");。我的帐户可以完全访问临时文件夹。当我从 Visual Studio 运行应用程序时会创建此文件,但当我将应用程序作为服务运行时不会创建它。

  • 我看过很多网站,包括这一个,这一个。不走运,我从这些站点尝试的所有内容仍然会产生拒绝访问错误。

我的想法已经用完了,希望这里有人可以为我提供答案。谢谢!

c# .net-core asp.net-core asp.net-core-3.1

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