Visual studio VisualStudio网站参考路径

Visual studio VisualStudio网站参考路径,visual-studio,version-control,Visual Studio,Version Control,在VisualStudio网站项目中(在VisualStudio2005或更高版本中,而不是仍然有.csproj文件的web应用程序项目中),引用信息是如何存储的,是否可以在不将编译的二进制文件存储在源代码管理中的情况下对其进行源代码管理 如果右键单击网站项目并选择属性页,则第一个屏幕(引用)将列出所有项目引用 System.*引用列为类型GAC,其他DLL文件可以列为BIN或Project 当您将某些内容作为项目引用,然后将其提交给源代码管理(对于我们来说,是Subversion,忽略.dll

在VisualStudio网站项目中(在VisualStudio2005或更高版本中,而不是仍然有.csproj文件的web应用程序项目中),引用信息是如何存储的,是否可以在不将编译的二进制文件存储在源代码管理中的情况下对其进行源代码管理

如果右键单击网站项目并选择属性页,则第一个屏幕(引用)将列出所有项目引用

System.*引用列为类型GAC,其他DLL文件可以列为BIN或Project

当您将某些内容作为项目引用,然后将其提交给源代码管理(对于我们来说,是Subversion,忽略.dll和.pdb文件)时,就会出现问题


另一个开发人员从存储库中获取更新的代码,并且必须手动设置所有这些项目引用,但我甚至无法确定这些信息存储在何处,除非它位于.suo中,该文件对源代码管理不友好。

如果通过“浏览”选项卡按文件名引用.dll,应该创建一个.refresh文件(嵌套在BIN中的dll下)。我们将它们放在SVN中,效果非常好(您可能需要手动编辑它们以使用相对路径)

从.NET选项卡添加的引用将添加到web.config

项目引用存储在解决方案(.sln)文件中。打开.sln文件,您将看到它们列出:

Project("{xxxxxxx-7377-xxxx-xxxx-BC803B73C61A}") = "XXXXXXX.Web", "XXXXXXX.Web", "{xxxxxxxx-BB14-xxxx-B3B6-8BF6D8BC5AFF}"
    ProjectSection(WebsiteProperties) = preProject
        TargetFramework = "3.5"
        ProjectReferences = "{xxxxxxxx-C3AB-xxxx-BBED-2055287036E5}|XXXXXX.Data.dll;
            ...

我使用copyprojectDll.ps1 powershell

我的文件夹结构如下

  • 类库
    第三方
    网站/Bin
    CopyprojectDll.ps1
    网址:www.sln
类库是我的项目DAL的代码类。。 网站项目仅包括web文件、aspx、aspx.cs。。 第三方是必需的库、AjaxToolkit等

我编译ClassLibraries.sln 我运行CopyprojectDll.ps1 在此之后,我使用Website.sln

下面是示例powershell文件

$folders=@(); $folders+=“IB.Security” $folders+=“类库/Core.Classes”

函数CopyDllsToWebBin($dll\U文件) { if($dll\U文件-eq$null) { 返回; } $targetfolder=“/Kod/bin/”

}

函数COPYDLLSTOTHIRDPARY($dll\U文件) {

$targetfolder=“./ThirdParty/”

}

$dll_output_folder=“/bin/debug”

foreach($文件夹中的文件夹) { $dll_files=Get ChildItem-Path$folder$dll_output_folder-include*.dll-Recurse |排序对象名 CopyDllsToWebBin($dll\U文件) $dll_files=Get ChildItem-Path$folder$dll_output_folder-include*.pdb-Recurse |排序对象名 CopyDllsToWebBin($dll\U文件) $dll_files=Get ChildItem-Path$folder$dll_output_folder-include*.xml-Recurse |排序对象名 CopyDllsToWebBin($dll\U文件) “已复制$folder$dll\u输出\u文件夹”

}

$dll_files=Get ChildItem-Path“ThirdParty”-include*.dll-Recurse |排序对象名 CopyDllsToWebBin($dll\U文件) $dll_files=Get ChildItem-Path“ThirdParty”-include*.pdb-Recurse |排序对象名 CopyDllsToWebBin($dll\U文件) $dll_files=Get ChildItem-Path$folder$dll_output_folder-include*.xml-Recurse |排序对象名 CopyDllsToWebBin($dll\U文件)

“抄袭第三方”


日期Visual Studio中的“网站”项目是一件奇怪的事情。它们似乎是为了迎合传统的web开发人员,因为“站点”只是目录中的一组文件。同样,在VisualStudio中创建“Web站点”项目时,没有真正的“项目”文件,就像C#projects有一个.csproj文件一样。但是,仍然存在一个解决方案文件(.sln)。通常,程序集.dll引用保存在项目文件中。既然一个网站没有,它们会去哪里

对其他项目的引用

如果添加对另一个项目的引用,则会在solution.sln文件中创建一个条目。结果是这样的:

Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "WebSite1", "..\..\WebSites\WebSite1\", "{F25DB9D6-810D-4C18-ACBB-BFC420D33B20}"
ProjectSection(WebsiteProperties) = preProject
TargetFramework = "3.5"
ProjectReferences = "{11666201-E9E8-4F5A-A7AB-93D90F3AD9DC}|ClassLibrary1.dll;"
文件系统引用

如果浏览文件系统并添加.dll文件,则Visual Studio将在\Bin文件夹中创建一个同名的“.refresh”文件。该文件只是一个单行文本文件,指示从中加载文件的路径。例如,如果我从..\libs中添加了“MyAssem.dll”,那么在Web站点\Bin文件夹中,我将在那里复制两个文件:MyAssem.dll和MyAssem.dll.refresh。.refresh文件将包含文本:“..\libs”。在每次生成时,Visual Studio都会检查.refresh文件中的路径,如果存在较新的.dll,则会覆盖Bin目录中的路径

警告:如果文件不存在.refresh文件指示其查看的位置,Visual Studio将不会引发错误。它将继续使用\Bin文件夹中已有的.dll。然而,它将输出一个警告

GAC参考资料

如果从全局程序集缓存添加程序集,Visual Studio将在Web.config文件中输入该程序集,如下所示:

Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "WebSite1", "..\..\WebSites\WebSite1\", "{F25DB9D6-810D-4C18-ACBB-BFC420D33B20}"
ProjectSection(WebsiteProperties) = preProject
TargetFramework = "3.5"
ProjectReferences = "{11666201-E9E8-4F5A-A7AB-93D90F3AD9DC}|ClassLibrary1.dll;"

这里需要再次注意的是,VisualStudio假设如果程序集位于开发计算机上的GAC中,那么它在运行时将位于同一位置!如果您的开发机器上安装了
Oracle.DataAccess
,这可能会给您带来麻烦,这会将其放入GAC中,但在部署时,您只需将.dll复制到生产机器上即可。它仍将尝试在GAC中找到它,并可能在运行时失败


我希望这有助于澄清网站上的奇怪之处以及参考文献是如何工作的

关于这个主题的非常有用的博客文章。谢谢。不幸的是,该链接似乎不再处于活动状态。@lgaud:oops对不起,我刚刚停用了今天早上发布的主机。我在某处复制了一份。。。如果我能找到它,我会用全文而不是链接更新我的答案。谢谢你!我总是对项目引用有问题,并且在添加项目引用时没有注意到sln文件正在更改。
Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "WebSite1", "..\..\WebSites\WebSite1\", "{F25DB9D6-810D-4C18-ACBB-BFC420D33B20}"
ProjectSection(WebsiteProperties) = preProject
TargetFramework = "3.5"
ProjectReferences = "{11666201-E9E8-4F5A-A7AB-93D90F3AD9DC}|ClassLibrary1.dll;"
<compilation debug="false">
 <assemblies>
  <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>