小编Tin*_*ter的帖子

将文件路径转换为文件URI?

.NET Framework是否有任何方法将路径(例如"C:\whatever.txt")转换为文件URI(例如"file:///C:/whatever.txt")?

的System.Uri类有反向(从文件URI以绝对路径),但没有就我可以找到转换为文件URI.

此外,这不是 ASP.NET应用程序.

.net c# uri path

191
推荐指数
5
解决办法
18万
查看次数

为什么一个类不能在C#中扩展自己的嵌套类?

例如:

public class A : A.B
{
    public class B { }
}
Run Code Online (Sandbox Code Playgroud)

这会从编译器生成此错误:

涉及'A'和'AB'的循环基类依赖

我总是认为一个嵌套类的行为就像一个普通的类,除了有关访问外部类的私有成员的特殊规则,但我想这两个类之间有一些隐式继承?

c# nested-class

31
推荐指数
2
解决办法
7510
查看次数

使用同一解决方案中的自定义MSBuild任务?

我是MSBuild的新手,想要稍微玩一下,但我无法弄清楚为什么这不起作用.

所以我的解决方案有两个项目:"Model"和"BuildTasks".BuildTasks只有一个类:

using Microsoft.Build.Utilities;

namespace BuildTasks
{
    public class Test : Task
    {
        public override bool Execute()
        {
            Log.LogMessage( "FASDfasdf" );
            return true;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在Model.csproj中我添加了这个:

  <UsingTask TaskName="BuildTasks.Test" AssemblyFile="$(SolutionDir)src\BuildTasks\bin\BuildTasks.dll" />
  <Target Name="AfterBuild">
    <Test />
  </Target>
Run Code Online (Sandbox Code Playgroud)

我已经设置了构建顺序,因此"BuildTasks"会在"Model"之前构建.但是,当我尝试构建模型时,我收到此错误:

无法从程序集C:\ WIP\TestSolution\src\BuildTasks\bin\BuildTasks.dll加载"BuildTasks.Test"任务.无法加载文件或程序集'file:/// C:\ WIP\TestSolution\src\BuildTasks\bin\BuildTasks.dll'或其依赖项之一.该系统找不到指定的文件.确认<UsingTask>声明是正确的,并且程序集及其所有依赖项都可用.

这个文件肯定存在,为什么MSBuild不能找到它呢?

我甚至尝试用硬编码"C:\ WIP\TestSolution"代替"$(SolutionDir)"并得到同样的错误.但是,如果我复制.dll文件到我的桌面和硬编码路径到我的桌面,它DOES工作,我想不通为什么.

编辑:我没有错路.我修改了BuildTasks的Debug/Release版本,将.dll输出到bin文件夹,因为我不希望Debug/Release有不同的路径.

.net msbuild

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

ObsoleteAttribute如何以及为何不允许使用属性访问器?

考虑这种情况:

public class C
{
    private int _foo;

    public int Foo
    {
        get { return _foo; }

        [Obsolete("Modifying Foo through the setter may corrupt hash tables.  "
            + "Consider using the method 'ModifyFoo' instead.")]
        set { _foo = value; }
    }

    public C ModifyFoo( int foo )
    {
        // return a new instance of C
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个不编译:

错误CS1667:属性"已过时"在属性或事件访问器上无效.它仅对'class,struct,enum,constructor,method,property,indexer,field,event,interface,delegate'声明有效.

将属性专门应用于访问器对于任何其他属性都是完全正确的(前提AttributeTargets.Method是在其用法中设置,这是真的ObsoleteAttribute).

c# attributes

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

WindowsImpersonationContext 下的程序集绑定。如何防止FileLoadException?

由于跨受保护的网络共享移动和创建许多文件,我有一个应用程序需要进行大量模拟。我创建了一个简单的静态类,它有一个方法接受用户、域、密码和一个委托,其中包含您需要在模拟上下文下运行的代码。

\n\n

我遇到的问题是当 CLR 尝试绑定到此上下文下引用的程序集时。抛出 FileLoadException 并显示“访问被拒绝”消息。

\n\n

我相信这是由于模拟用户没有足够的权限访问文件系统下的 *.DLL 文件。例如,我可以在模拟块之前编写良性代码,这除了在上下文切换到模拟用户之前从问题程序集中加载类型之外什么也不做,这非常有效!然而,我真的不认为这是一个优雅的解决方案 \xe2\x80\x93 我是否需要开始担心我可以在模拟下使用哪些类型,确保我随机放置typeof()事先放置了随机语句?

\n\n

更令人沮丧的是,我在本地开发计算机上没有遇到这个问题。当程序集被运送到测试环境时,就会出现此问题。而且我无权从测试环境中读取文件权限来尝试在我的本地计算机上模仿它们。

\n\n

无论如何,我尝试了这个解决方案:

\n\n
// Defined above:\n// System.Security.Principal.WindowsIdentity identity;\n// System.Security.Principal.WindowsImpersonationContext context;\n\ncontext = identity.Impersonate();\n\nint tries = 0;\nwhile ( true )\n{\n    try\n    {\n        contextAction();\n    }\n    catch ( FileLoadException ex )\n    {\n        if ( tries > MAX_TRIES )\n        {\n            // don't allow an infinite loop\n            throw;\n        }\n        if ( String.IsNullOrEmpty( ex.FileName ) )\n        {\n            // if this is null/empty, we can't really recover\n            throw;\n        }\n        context.Undo(); // …
Run Code Online (Sandbox Code Playgroud)

.net c# clr assemblies assemblybinding

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

如何确定复合格式字符串是否无效?

根据文档,String.Format将抛出一个FormatExceptionif(A)格式字符串无效或(B)格式字符串包含在args数组中找不到的索引.

我希望能够确定任何字符串和参数数组中哪些(如果有)这些条件失败.

有什么能帮我的吗?谢谢!

.net c# string.format

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

从网站启动可执行文件?

我们正在开发一个只能在Intranet上运行的站点,并且可以访问此Intranet的计算机将安装此可执行文件.我们不能有任何"你想打开[filename] .exe吗?" 提示.单击一个链接,程序开始运行.

我意识到让网站能够在客户端计算机上运行可执行文件非常非常糟糕,但是管理层拒绝让步.

机器将使用Firefox 3的Windows(XP或更高版本).

windows executable web

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

System.Random 不是那么随机,为什么会出现这种情况?

可能重复:
随机数生成器只生成一个随机数

我已将在更大系统中观察到的行为提炼为以下代码序列:

for (int i = 0; i < 100; i++)
{
    Random globalRand = new Random(0x3039 + i);

    globalRand.Next();
    globalRand.Next();
    int newSeed = globalRand.Next();

    Random rand = new Random(newSeed);
    int value = rand.Next(1, 511);
    Console.WriteLine(value);
}
Run Code Online (Sandbox Code Playgroud)

从面向 .NET 4.5 的 Visual Studio 2012 运行此程序将输出 316 或 315。将其扩展到 100 次迭代之后,您将看到该值缓慢递减(314、313...),但它仍然不是我想象的任何人都会考虑“随机”。

编辑

我知道 StackOverflow 上已经有几个问题在问为什么他们的随机数不是随机的。但是,这些问题存在以下问题:a) 不将种子(或同一个种子)传递给它们的 Random 对象实例,或者 b) 执行类似操作NextInt(0, 1)并且没有意识到第二个参数是排他性边界。对于这个问题,这些问题都不是真的。

c#

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