Azure sitesroot 不包含所有部署的文件
Azure sitesroot does not contain all deployed files
我正在使用 VS 2013 将 Web 角色部署到 Azure。我在我的 .csdef
文件中添加了一个 Contents
元素,以像这样部署 Azure 部署包中未包含的额外文件:
<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="..." xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2014-06.2.4">
<WebRole name="..." vmsize="Small">
<!-- snip -->
<Contents>
<Content destination="bin/">
<SourceDirectory path="C:\...\bin"/>
</Content>
</Contents>
</WebRole>
</ServiceDefinition>
部署包后,我可以看到额外的文件被放入实例 F:
驱动器上的 approot
文件夹中。但是,这些文件从未部署到 sitesroot[=15=]
文件夹,Web 角色似乎从该文件夹 运行。因为这些额外的文件是要动态加载的程序集,所以我希望它们与应用程序的其他程序集在一起。
这种行为是故意的还是我做错了什么?这个网上好像资料不多
行为是 as per the documentation,表明部署位置是相对于角色的 APPROOT(您看到的行为)而言的。
如果您希望将它们部署到站点的 bin 文件夹中,您需要将它们打包为 Visual Studio 解决方案的一部分。
您可以将 DLL 添加到项目的根目录(添加 -> 现有项)。如果您采用该 DLL 并将 Build Action
设置更改为 Content
并将 Copy to Output Directory
设置为 Copy Always
那么我认为这将确保 DLL 最终位于您的 BIN
文件夹,或等价物。
我过去所做的一个例子:
解决方案中的两个项目名为:
DependenciesProject
(Class 图书馆)
WebProject
(MVC 应用程序)
我需要包含一些需要捆绑到编译包中的特定 DLL,但将使用的特定 DLL 会根据我的编译目标(x64 与 x86)而改变。我们选择的解决方案是让 DependenciesProject
执行我上面为您描述的操作,我们修改了 .csproj
文件以根据编译时指定的目标更改这些本机 DLL 的路径-时间(我们禁用了 Any CPU
)。
所以 DependenciesProject
在根目录中有这些 DLL(.csproj
对我们的 Nuget packages
文件夹中存在的 DLL 的动态路径进行了一些调整)和解决方案资源管理器中的 DLL 将 Build Action
设置为 Content
,并将 Copy to Output Directory
设置为 Copy Always
。这意味着无论何时编译 DependenciesProject.dll
文件,它都会将其他 DLL 移动到与该 .DLL 文件相同的输出文件夹中。
现在 WebProject
项目将具有对 DependenciesProject
的项目引用。这意味着每次我尝试编译 WebProject
时,它都会先编译 DependenciesProject
,然后将其输出文件夹复制到 WebProject
的输出文件夹中。
最终结果:DependenciesProject.dll
以及 MySpecial.dll
每次我需要时都存在于我的 Web 应用程序中。
这有帮助吗?
我最终使用了 Content 元素,但目标路径不同,指向 sitesroot 文件夹。这有点 hack,但至少它可以在不深入研究 MSBuild 或手动打包部署的情况下工作。
<ServiceDefinition name="..." xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2014-06.2.4">
<WebRole name="..." vmsize="Small">
<!-- snip -->
<Contents>
<Content destination="..\sitesroot[=10=]\bin">
<SourceDirectory path="C:\...\bin" />
</Content>
</Contents>
</WebRole>
</ServiceDefinition>
我正在使用 VS 2013 将 Web 角色部署到 Azure。我在我的 .csdef
文件中添加了一个 Contents
元素,以像这样部署 Azure 部署包中未包含的额外文件:
<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="..." xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2014-06.2.4">
<WebRole name="..." vmsize="Small">
<!-- snip -->
<Contents>
<Content destination="bin/">
<SourceDirectory path="C:\...\bin"/>
</Content>
</Contents>
</WebRole>
</ServiceDefinition>
部署包后,我可以看到额外的文件被放入实例 F:
驱动器上的 approot
文件夹中。但是,这些文件从未部署到 sitesroot[=15=]
文件夹,Web 角色似乎从该文件夹 运行。因为这些额外的文件是要动态加载的程序集,所以我希望它们与应用程序的其他程序集在一起。
这种行为是故意的还是我做错了什么?这个网上好像资料不多
行为是 as per the documentation,表明部署位置是相对于角色的 APPROOT(您看到的行为)而言的。
如果您希望将它们部署到站点的 bin 文件夹中,您需要将它们打包为 Visual Studio 解决方案的一部分。
您可以将 DLL 添加到项目的根目录(添加 -> 现有项)。如果您采用该 DLL 并将 Build Action
设置更改为 Content
并将 Copy to Output Directory
设置为 Copy Always
那么我认为这将确保 DLL 最终位于您的 BIN
文件夹,或等价物。
我过去所做的一个例子: 解决方案中的两个项目名为:
DependenciesProject
(Class 图书馆)WebProject
(MVC 应用程序)
我需要包含一些需要捆绑到编译包中的特定 DLL,但将使用的特定 DLL 会根据我的编译目标(x64 与 x86)而改变。我们选择的解决方案是让 DependenciesProject
执行我上面为您描述的操作,我们修改了 .csproj
文件以根据编译时指定的目标更改这些本机 DLL 的路径-时间(我们禁用了 Any CPU
)。
所以 DependenciesProject
在根目录中有这些 DLL(.csproj
对我们的 Nuget packages
文件夹中存在的 DLL 的动态路径进行了一些调整)和解决方案资源管理器中的 DLL 将 Build Action
设置为 Content
,并将 Copy to Output Directory
设置为 Copy Always
。这意味着无论何时编译 DependenciesProject.dll
文件,它都会将其他 DLL 移动到与该 .DLL 文件相同的输出文件夹中。
现在 WebProject
项目将具有对 DependenciesProject
的项目引用。这意味着每次我尝试编译 WebProject
时,它都会先编译 DependenciesProject
,然后将其输出文件夹复制到 WebProject
的输出文件夹中。
最终结果:DependenciesProject.dll
以及 MySpecial.dll
每次我需要时都存在于我的 Web 应用程序中。
这有帮助吗?
我最终使用了 Content 元素,但目标路径不同,指向 sitesroot 文件夹。这有点 hack,但至少它可以在不深入研究 MSBuild 或手动打包部署的情况下工作。
<ServiceDefinition name="..." xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2014-06.2.4">
<WebRole name="..." vmsize="Small">
<!-- snip -->
<Contents>
<Content destination="..\sitesroot[=10=]\bin">
<SourceDirectory path="C:\...\bin" />
</Content>
</Contents>
</WebRole>
</ServiceDefinition>