我正在使用VS2010,我试图通过文件引用从本地硬盘添加一些程序集到我的C#项目.窥视csproj文件,我发现有时文件引用显示为
<Reference Include="name">
Run Code Online (Sandbox Code Playgroud)
但有时它看起来像
<Reference Include="name, Version=xxx, Culture=neutral,
processorArchitecture=MSIL">
Run Code Online (Sandbox Code Playgroud)
什么可能导致差异?
受到k3b答案的启发,我做了另一个测试.我创建了一个新的类库项目.
添加文件引用.的初始值特定版本的属性面板是假.该csproj文件看起来像
<Reference Include="Name">
<HintPath>...</HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)更改特定版本的属性窗格真.VS在Include属性中添加版本.
<Reference Include="Name, Version=...">
<HintPath>...</HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)更改特定版本的属性窗格中假一次.VS添加了一个子元素SpecificVersion.
<Reference Include="Name, Version=...">
<HintPath>...</HintPath>
<SpecificVersion>False</SpecificVersion>
</Reference>
Run Code Online (Sandbox Code Playgroud)所以似乎规则是:
SpecificVersion子元素,该文件组件被配置为特定版本SpecificVersion子元素只与价值附加假.有一点我还是不明白:
我创建了一个简单的ASP.NET MVC 1.0版应用程序.我有一个ProductController,它有一个动作索引.在视图中,我在Product子文件夹下创建了相应的Index.aspx.
然后我引用了Spark dll并在同一Product视图文件夹下创建了Index.spark.Application_Start看起来像
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new Spark.Web.Mvc.SparkViewFactory());
ViewEngines.Engines.Add(new WebFormViewEngine());
}
Run Code Online (Sandbox Code Playgroud)
我的期望是,由于Spark引擎在默认WebFormViewEngine之前注册,当浏览Product controller中的Index操作时,应该使用Spark引擎,并且WebFormViewEngine应该用于所有其他URL.
但是,测试显示Product控制器的Index操作也使用WebFormViewEngine.
如果我注释掉WebFormViewEnginer的注册(代码中的最后一行),我可以看到Index动作由Spark引擎呈现,其余的URL生成错误(因为defualt引擎已经消失),它证明了我所有的Spark代码是正确的.
现在我的问题是视图引擎是如何解决的?为什么注册序列不生效?
默认情况下,机器密钥设置是自动生成和每个应用程序(AutoGenerate,IsolateApps).MSDN声明解密密钥和验证密钥基于Web应用程序ID.我在我的IIS 7服务器上托管了两个ASP.NET MVC 2站点,但发现机器密钥是相同的.我通过使用反射来验证这一点,以查看ValidationKeyInternal和DecryptionKeyInternal属性.我还通过在一个站点上生成防伪令牌cookie并将其传递给另一个站点来测试它,并且可以读取cookie.
经过反复试验,我发现如果应用程序池标识发生更改,密钥将会更改.这两个站点具有相同的密钥,因为它们在网络服务凭证下运行.一旦我更改了一个站点的应用程序池标识,他们就会开始使用不同的验证/加密密钥.
但是,在将两个站点部署到另一个服务器之后,即使更改了应用程序池标识,我也总是获得相同的机器密钥.这两台服务器具有相同的硬件和软件配置.
我想知道是否存在关于如何在AutoGenerate,IsolateApps设置下生成机器密钥的实际逻辑的参考.在Web上,有很多文章讨论在Web场方案中设置相同的机器密钥.但我在对面遇到了问题.每个Web应用程序自动密钥生成似乎无法正常工作.以前有没有人有同样的问题?